op/clip: remove Op.Add

The Add method was a compatibility stop-gap.

API change. Use clip.Op.Push and Pop the return value to explicitly mark
the region affected by the clip operation.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-10-24 14:04:03 +02:00
parent 9cf7cc75f4
commit e14e33b87e
5 changed files with 8 additions and 58 deletions
+3 -10
View File
@@ -1710,7 +1710,6 @@ func (c *collector) addClip(state *encoderState, viewport, bounds f32.Rectangle,
path: path,
pathKey: key,
intersect: intersect,
push: push,
clipKey: clipKey{
bounds: bounds,
relTrans: state.relTrans,
@@ -1775,18 +1774,12 @@ func (c *collector) collect(root *op.Ops, viewport image.Point, texOps *[]textur
case ops.TypeClip:
var op clipOp
op.decode(encOp.Data)
c.addClip(&state, fview, op.bounds, pathData.data, pathData.key, pathData.hash, strWidth, op.push)
c.addClip(&state, fview, op.bounds, pathData.data, pathData.key, pathData.hash, strWidth, true)
pathData.data = nil
strWidth = 0
case ops.TypePopClip:
for {
push := state.clip.push
state.relTrans = state.clip.relTrans.Mul(state.relTrans)
state.clip = state.clip.parent
if push {
break
}
}
state.relTrans = state.clip.relTrans.Mul(state.relTrans)
state.clip = state.clip.parent
case ops.TypeColor:
state.matType = materialColor
state.color = decodeColorOp(encOp.Data)
+2 -14
View File
@@ -109,9 +109,6 @@ type pathOp struct {
// rect tracks whether the clip stack can be represented by a
// pixel-aligned rectangle.
rect bool
// push is set to true for clip operations that corresponds to
// a push operation.
push bool
// clip is the union of all
// later clip rectangles.
clip image.Rectangle
@@ -173,7 +170,6 @@ type clipOp struct {
// TODO: Use image.Rectangle?
bounds f32.Rectangle
outline bool
push bool
}
// imageOpData is the shadow of paint.ImageOp.
@@ -207,7 +203,6 @@ func (op *clipOp) decode(data []byte) {
*op = clipOp{
bounds: layout.FRect(r),
outline: data[17] == 1,
push: data[18] == 1,
}
}
@@ -863,7 +858,6 @@ func (d *drawOps) addClipPath(state *drawState, aux []byte, auxKey opKey, bounds
off: off,
intersect: bounds.Add(off),
rect: true,
push: push,
}
if npath.parent != nil {
npath.rect = npath.parent.rect
@@ -971,16 +965,10 @@ loop:
quads.aux, op.bounds, _ = d.boundsForTransformedRect(bounds, trans)
quads.key = opKey{Key: encOp.Key}
}
d.addClipPath(&state, quads.aux, quads.key, op.bounds, off, op.push)
d.addClipPath(&state, quads.aux, quads.key, op.bounds, off, true)
quads = quadsOp{}
case ops.TypePopClip:
for {
push := state.cpath.push
state.cpath = state.cpath.parent
if push {
break
}
}
state.cpath = state.cpath.parent
case ops.TypeColor:
state.matType = materialColor