mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 01:45:36 +00:00
op: add package op for operations
Extract operation types from package ui into package op. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -3,12 +3,7 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"gioui.org/f32"
|
||||
"gioui.org/internal/opconst"
|
||||
)
|
||||
|
||||
// Config define the essential properties of
|
||||
@@ -19,60 +14,3 @@ type Config interface {
|
||||
// Px converts a Value to pixels.
|
||||
Px(v Value) int
|
||||
}
|
||||
|
||||
// InvalidateOp requests a redraw at the given time. Use
|
||||
// the zero value to request an immediate redraw.
|
||||
type InvalidateOp struct {
|
||||
At time.Time
|
||||
}
|
||||
|
||||
// TransformOp applies a transform to the current transform.
|
||||
type TransformOp struct {
|
||||
// TODO: general transformations.
|
||||
offset f32.Point
|
||||
}
|
||||
|
||||
func (r InvalidateOp) Add(o *Ops) {
|
||||
data := make([]byte, opconst.TypeRedrawLen)
|
||||
data[0] = byte(opconst.TypeInvalidate)
|
||||
bo := binary.LittleEndian
|
||||
// UnixNano cannot represent the zero time.
|
||||
if t := r.At; !t.IsZero() {
|
||||
nanos := t.UnixNano()
|
||||
if nanos > 0 {
|
||||
bo.PutUint64(data[1:], uint64(nanos))
|
||||
}
|
||||
}
|
||||
o.Write(data)
|
||||
}
|
||||
|
||||
// Offset the transformation.
|
||||
func (t TransformOp) Offset(o f32.Point) TransformOp {
|
||||
return t.Multiply(TransformOp{o})
|
||||
}
|
||||
|
||||
// Invert the transformation.
|
||||
func (t TransformOp) Invert() TransformOp {
|
||||
return TransformOp{offset: t.offset.Mul(-1)}
|
||||
}
|
||||
|
||||
// Transform a point.
|
||||
func (t TransformOp) Transform(p f32.Point) f32.Point {
|
||||
return p.Add(t.offset)
|
||||
}
|
||||
|
||||
// Multiply by a transformation.
|
||||
func (t TransformOp) Multiply(t2 TransformOp) TransformOp {
|
||||
return TransformOp{
|
||||
offset: t.offset.Add(t2.offset),
|
||||
}
|
||||
}
|
||||
|
||||
func (t TransformOp) Add(o *Ops) {
|
||||
data := make([]byte, opconst.TypeTransformLen)
|
||||
data[0] = byte(opconst.TypeTransform)
|
||||
bo := binary.LittleEndian
|
||||
bo.PutUint32(data[1:], math.Float32bits(t.offset.X))
|
||||
bo.PutUint32(data[5:], math.Float32bits(t.offset.Y))
|
||||
o.Write(data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user