ui: merge Transform into TransformOp

The separate Transform type is not worth its weight.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-07-29 01:02:26 -07:00
parent d178167c3b
commit 5e1f078b12
9 changed files with 29 additions and 39 deletions
+2 -2
View File
@@ -73,7 +73,7 @@ type drawOps struct {
type drawState struct { type drawState struct {
clip f32.Rectangle clip f32.Rectangle
t ui.Transform t ui.TransformOp
cpath *pathOp cpath *pathOp
rect bool rect bool
z int z int
@@ -664,7 +664,7 @@ loop:
case ops.TypeTransform: case ops.TypeTransform:
var op ui.TransformOp var op ui.TransformOp
op.Decode(encOp.Data) op.Decode(encOp.Data)
state.t = state.t.Mul(op.Transform) state.t = state.t.Mul(op)
case ops.TypeAux: case ops.TypeAux:
aux = encOp.Data[ops.TypeAuxLen:] aux = encOp.Data[ops.TypeAuxLen:]
auxKey = encOp.Key auxKey = encOp.Key
+5 -5
View File
@@ -41,7 +41,7 @@ type pointerInfo struct {
type pointerHandler struct { type pointerHandler struct {
area int area int
active bool active bool
transform ui.Transform transform ui.TransformOp
wantsGrab bool wantsGrab bool
} }
@@ -51,7 +51,7 @@ type areaOp struct {
} }
type areaNode struct { type areaNode struct {
trans ui.Transform trans ui.TransformOp
next int next int
area areaOp area areaOp
} }
@@ -63,7 +63,7 @@ const (
areaEllipse areaEllipse
) )
func (q *pointerQueue) collectHandlers(r *ui.OpsReader, events *handlerEvents, t ui.Transform, area, node int, pass bool) { func (q *pointerQueue) collectHandlers(r *ui.OpsReader, events *handlerEvents, t ui.TransformOp, area, node int, pass bool) {
for encOp, ok := r.Decode(); ok; encOp, ok = r.Decode() { for encOp, ok := r.Decode(); ok; encOp, ok = r.Decode() {
switch ops.OpType(encOp.Data[0]) { switch ops.OpType(encOp.Data[0]) {
case ops.TypePush: case ops.TypePush:
@@ -88,7 +88,7 @@ func (q *pointerQueue) collectHandlers(r *ui.OpsReader, events *handlerEvents, t
case ops.TypeTransform: case ops.TypeTransform:
var op ui.TransformOp var op ui.TransformOp
op.Decode(encOp.Data) op.Decode(encOp.Data)
t = t.Mul(op.Transform) t = t.Mul(op)
case ops.TypePointerHandler: case ops.TypePointerHandler:
var op pointer.HandlerOp var op pointer.HandlerOp
op.Decode(encOp.Data, encOp.Refs) op.Decode(encOp.Data, encOp.Refs)
@@ -169,7 +169,7 @@ func (q *pointerQueue) Frame(root *ui.Ops, events *handlerEvents) {
q.hitTree = q.hitTree[:0] q.hitTree = q.hitTree[:0]
q.areas = q.areas[:0] q.areas = q.areas[:0]
q.reader.Reset(root) q.reader.Reset(root)
q.collectHandlers(&q.reader, events, ui.Transform{}, -1, -1, false) q.collectHandlers(&q.reader, events, ui.TransformOp{}, -1, -1, false)
for k, h := range q.handlers { for k, h := range q.handlers {
if !h.active { if !h.active {
q.dropHandler(k) q.dropHandler(k)
+1 -3
View File
@@ -159,9 +159,7 @@ func (f *Flex) Layout(children ...FlexChild) Dimens {
} }
var stack ui.StackOp var stack ui.StackOp
stack.Push(f.ops) stack.Push(f.ops)
ui.TransformOp{ ui.TransformOp{}.Offset(toPointF(axisPoint(f.Axis, mainSize, cross))).Add(f.ops)
Transform: ui.Offset(toPointF(axisPoint(f.Axis, mainSize, cross))),
}.Add(f.ops)
child.macro.Add(f.ops) child.macro.Add(f.ops)
stack.Pop() stack.Pop()
mainSize += axisMain(f.Axis, dims.Size) mainSize += axisMain(f.Axis, dims.Size)
+2 -2
View File
@@ -96,7 +96,7 @@ func (in *Inset) Begin(c ui.Config, ops *ui.Ops, cs Constraints) Constraints {
} }
} }
in.stack.Push(ops) in.stack.Push(ops)
ui.TransformOp{Transform: ui.Offset(toPointF(image.Point{X: in.left, Y: in.top}))}.Add(ops) ui.TransformOp{}.Offset(toPointF(image.Point{X: in.left, Y: in.top})).Add(ops)
return mcs return mcs
} }
@@ -169,7 +169,7 @@ func (a *Align) End(dims Dimens) Dimens {
} }
var stack ui.StackOp var stack ui.StackOp
stack.Push(ops) stack.Push(ops)
ui.TransformOp{Transform: ui.Offset(toPointF(p))}.Add(ops) ui.TransformOp{}.Offset(toPointF(p)).Add(ops)
a.macro.Add(ops) a.macro.Add(ops)
stack.Pop() stack.Pop()
return Dimens{ return Dimens{
+1 -3
View File
@@ -229,9 +229,7 @@ func (l *List) Layout() Dimens {
var stack ui.StackOp var stack ui.StackOp
stack.Push(ops) stack.Push(ops)
draw.RectClip(r).Add(ops) draw.RectClip(r).Add(ops)
ui.TransformOp{ ui.TransformOp{}.Offset(toPointF(axisPoint(l.Axis, transPos, cross))).Add(ops)
Transform: ui.Offset(toPointF(axisPoint(l.Axis, transPos, cross))),
}.Add(ops)
child.macro.Add(ops) child.macro.Add(ops)
stack.Pop() stack.Pop()
pos += childSize pos += childSize
+1 -1
View File
@@ -106,7 +106,7 @@ func (s *Stack) Layout(children ...StackChild) Dimens {
} }
var stack ui.StackOp var stack ui.StackOp
stack.Push(s.ops) stack.Push(s.ops)
ui.TransformOp{Transform: ui.Offset(toPointF(p))}.Add(s.ops) ui.TransformOp{}.Offset(toPointF(p)).Add(s.ops)
ch.macro.Add(s.ops) ch.macro.Add(s.ops)
stack.Pop() stack.Pop()
} }
+1 -1
View File
@@ -209,7 +209,7 @@ func (e *Editor) Layout(cfg ui.Config, queue input.Queue, ops *ui.Ops, cs layout
} }
var stack ui.StackOp var stack ui.StackOp
stack.Push(ops) stack.Push(ops)
ui.TransformOp{Transform: ui.Offset(lineOff)}.Add(ops) ui.TransformOp{}.Offset(lineOff).Add(ops)
e.Face.Path(str).Add(ops) e.Face.Path(str).Add(ops)
draw.DrawOp{Rect: toRectF(clip).Sub(lineOff)}.Add(ops) draw.DrawOp{Rect: toRectF(clip).Sub(lineOff)}.Add(ops)
stack.Pop() stack.Pop()
+1 -1
View File
@@ -109,7 +109,7 @@ func (l Label) Layout(ops *ui.Ops, cs layout.Constraints) layout.Dimens {
lclip := toRectF(clip).Sub(off) lclip := toRectF(clip).Sub(off)
var stack ui.StackOp var stack ui.StackOp
stack.Push(ops) stack.Push(ops)
ui.TransformOp{Transform: ui.Offset(off)}.Add(ops) ui.TransformOp{}.Offset(off).Add(ops)
l.Face.Path(str).Add(ops) l.Face.Path(str).Add(ops)
// Set a default color in case the material is empty. // Set a default color in case the material is empty.
draw.ColorOp{Color: color.RGBA{A: 0xff}}.Add(ops) draw.ColorOp{Color: color.RGBA{A: 0xff}}.Add(ops)
+13 -19
View File
@@ -28,11 +28,7 @@ type InvalidateOp struct {
// TransformOp applies a transform to later ops. // TransformOp applies a transform to later ops.
type TransformOp struct { type TransformOp struct {
Transform Transform // TODO: general transformations.
}
type Transform struct {
// TODO: general transforms.
offset f32.Point offset f32.Point
} }
@@ -63,16 +59,20 @@ func (r *InvalidateOp) Decode(d []byte) {
} }
} }
func (t Transform) InvTransform(p f32.Point) f32.Point { func (t TransformOp) Offset(o f32.Point) TransformOp {
return TransformOp{o}
}
func (t TransformOp) InvTransform(p f32.Point) f32.Point {
return p.Sub(t.offset) return p.Sub(t.offset)
} }
func (t Transform) Transform(p f32.Point) f32.Point { func (t TransformOp) Transform(p f32.Point) f32.Point {
return p.Add(t.offset) return p.Add(t.offset)
} }
func (t Transform) Mul(t2 Transform) Transform { func (t TransformOp) Mul(t2 TransformOp) TransformOp {
return Transform{ return TransformOp{
offset: t.offset.Add(t2.offset), offset: t.offset.Add(t2.offset),
} }
} }
@@ -81,8 +81,8 @@ func (t TransformOp) Add(o *Ops) {
data := make([]byte, ops.TypeTransformLen) data := make([]byte, ops.TypeTransformLen)
data[0] = byte(ops.TypeTransform) data[0] = byte(ops.TypeTransform)
bo := binary.LittleEndian bo := binary.LittleEndian
bo.PutUint32(data[1:], math.Float32bits(t.Transform.offset.X)) bo.PutUint32(data[1:], math.Float32bits(t.offset.X))
bo.PutUint32(data[5:], math.Float32bits(t.Transform.offset.Y)) bo.PutUint32(data[5:], math.Float32bits(t.offset.Y))
o.Write(data) o.Write(data)
} }
@@ -91,14 +91,8 @@ func (t *TransformOp) Decode(d []byte) {
if ops.OpType(d[0]) != ops.TypeTransform { if ops.OpType(d[0]) != ops.TypeTransform {
panic("invalid op") panic("invalid op")
} }
*t = TransformOp{ *t = TransformOp{f32.Point{
Transform: Offset(f32.Point{
X: math.Float32frombits(bo.Uint32(d[1:])), X: math.Float32frombits(bo.Uint32(d[1:])),
Y: math.Float32frombits(bo.Uint32(d[5:])), Y: math.Float32frombits(bo.Uint32(d[5:])),
}), }}
}
}
func Offset(o f32.Point) Transform {
return Transform{o}
} }