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
+1 -1
View File
@@ -118,7 +118,7 @@ const (
TypeSaveLen = 1 + 4
TypeLoadLen = 1 + 4
TypeAuxLen = 1
TypeClipLen = 1 + 4*4 + 1 + 1
TypeClipLen = 1 + 4*4 + 1
TypePopClipLen = 1
TypeProfileLen = 1
TypeCursorLen = 1 + 1
+2 -12
View File
@@ -41,18 +41,11 @@ func init() {
// state to the intersection of the current p.
func (p Op) Push(o *op.Ops) Stack {
id, macroID := ops.PushOp(&o.Internal, ops.ClipStack)
p.add(o, true)
p.add(o)
return Stack{ops: &o.Internal, id: id, macroID: macroID}
}
// Add is like Push except it doesn't save the current state on the stack.
//
// Deprecated: use Push instead.
func (p Op) Add(o *op.Ops) {
p.add(o, false)
}
func (p Op) add(o *op.Ops, push bool) {
func (p Op) add(o *op.Ops) {
path := p.path
outline := p.outline
@@ -87,9 +80,6 @@ func (p Op) add(o *op.Ops, push bool) {
if outline {
data[17] = byte(1)
}
if push {
data[18] = byte(1)
}
}
func (s Stack) Pop() {
-21
View File
@@ -28,13 +28,6 @@ func (r Rect) Push(ops *op.Ops) Stack {
return r.Op().Push(ops)
}
// Add the rectangle clip to the clip state.
//
// Deprecated: use Push instead.
func (r Rect) Add(ops *op.Ops) {
r.Op().Add(ops)
}
// UniformRRect returns an RRect with all corner radii set to the
// provided radius.
func UniformRRect(rect f32.Rectangle, radius float32) RRect {
@@ -78,13 +71,6 @@ func (rr RRect) Push(ops *op.Ops) Stack {
return rr.Op(ops).Push(ops)
}
// Add the rectangle clip to the clip state.
//
// Deprecated: use Push instead.
func (rr RRect) Add(ops *op.Ops) {
rr.Op(ops).Add(ops)
}
// Path returns the PathSpec for the rounded rectangle.
func (rr RRect) Path(ops *op.Ops) PathSpec {
var p Path
@@ -138,13 +124,6 @@ func (c Circle) Push(ops *op.Ops) Stack {
return c.Op(ops).Push(ops)
}
// Add the circle clip to the clip state.
//
// Deprecated: use Push instead.
func (c Circle) Add(ops *op.Ops) {
c.Op(ops).Add(ops)
}
// Path returns the PathSpec for the circle.
func (c Circle) Path(ops *op.Ops) PathSpec {
var p Path