ui: make OpPush and OpPop explicit

We're about to allow OpBlock for invoking ops from multiple (cached)
Ops containers. To allow for drawing state changes to stick after
invoking such a cached block, we can't let OpBlock perform an implicit
save and restore of drawing state.

Instead, introduce OpPush and OpPop for explicit drawing state stack
management.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-06-02 15:10:09 +02:00
parent bf5d083b8a
commit 9142345fd4
7 changed files with 28 additions and 20 deletions
+4 -4
View File
@@ -97,13 +97,13 @@ func (in *Insets) Begin(ops *ui.Ops, cs Constraints) Constraints {
mcs.Height.Max = mcs.Height.Min
}
}
ops.Begin()
ui.OpPush{}.Add(ops)
ui.OpTransform{Transform: ui.Offset(toPointF(image.Point{X: l, Y: t}))}.Add(ops)
return mcs
}
func (in *Insets) End(ops *ui.Ops, dims Dimens) Dimens {
ops.End().Add(ops)
ui.OpPop{}.Add(ops)
t, r, b, l := int(math.Round(float64(in.Top))), int(math.Round(float64(in.Right))), int(math.Round(float64(in.Bottom))), int(math.Round(float64(in.Left)))
return Dimens{
Size: in.cs.Constrain(dims.Size.Add(image.Point{X: r + l, Y: t + b})),
@@ -176,10 +176,10 @@ func (a *Align) End(ops *ui.Ops, dims Dimens) Dimens {
case SW, S, SE:
p.Y = sz.Y - dims.Size.Y
}
ops.Begin()
ui.OpPush{}.Add(ops)
ui.OpTransform{Transform: ui.Offset(toPointF(p))}.Add(ops)
block.Add(ops)
ops.End().Add(ops)
ui.OpPop{}.Add(ops)
return Dimens{
Size: sz,
Baseline: dims.Baseline,