op/paint: return ClipOp from Path.End

Instead of adding an implicit ClipOp, return a ClipOp ready to use, freeing the
caller from recording a macro.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-10-09 15:05:09 +02:00
parent a937a76534
commit ef5cf5b724
6 changed files with 36 additions and 29 deletions
+10 -5
View File
@@ -25,14 +25,17 @@ type Path struct {
pen f32.Point
bounds f32.Rectangle
hasBounds bool
macro op.MacroOp
}
// ClipOp sets the current clip path.
type ClipOp struct {
macro op.MacroOp
bounds f32.Rectangle
}
func (p ClipOp) Add(o *op.Ops) {
p.macro.Add(o)
data := make([]byte, opconst.TypeClipLen)
data[0] = byte(opconst.TypeClip)
bo := binary.LittleEndian
@@ -46,6 +49,7 @@ func (p ClipOp) Add(o *op.Ops) {
// Begin the path, storing the path data and final ClipOp into ops.
func (p *Path) Begin(ops *op.Ops) {
p.ops = ops
p.macro.Record(ops)
}
// MoveTo moves the pen to the given position.
@@ -280,11 +284,12 @@ func (p *Path) simpleQuadTo(ctrl, to f32.Point) {
p.pen = to
}
// End the path and add the resulting ClipOp to
// the operation list passed to Init.
func (p *Path) End() {
// End the path and return the resulting ClipOp.
func (p *Path) End() ClipOp {
p.end()
ClipOp{
p.macro.Stop()
return ClipOp{
macro: p.macro,
bounds: p.bounds,
}.Add(p.ops)
}
}