mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
op/clip: fix Path open state
If a Move/MoveTo did not move the pen, the Path was still set as open. Signed-off-by: Pierre Curto <pierre.curto@gmail.com>
This commit is contained in:
@@ -154,6 +154,9 @@ func (p *Path) Move(delta f32.Point) {
|
||||
|
||||
// MoveTo moves the pen to the specified absolute coordinate.
|
||||
func (p *Path) MoveTo(to f32.Point) {
|
||||
if p.pen == to {
|
||||
return
|
||||
}
|
||||
p.open = p.open || p.pen != p.start
|
||||
p.end()
|
||||
p.pen = to
|
||||
|
||||
+29
-10
@@ -4,6 +4,7 @@ package clip_test
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
"math"
|
||||
"testing"
|
||||
|
||||
"gioui.org/f32"
|
||||
@@ -13,16 +14,34 @@ import (
|
||||
"gioui.org/op/paint"
|
||||
)
|
||||
|
||||
func TestOpenPathOutlinePanic(t *testing.T) {
|
||||
defer func() {
|
||||
if err := recover(); err == nil {
|
||||
t.Error("Outline of an open path didn't panic")
|
||||
}
|
||||
}()
|
||||
var p clip.Path
|
||||
p.Begin(new(op.Ops))
|
||||
p.Line(f32.Pt(10, 10))
|
||||
clip.Outline{Path: p.End()}.Op()
|
||||
func TestPathOutline(t *testing.T) {
|
||||
t.Run("unclosed path", func(t *testing.T) {
|
||||
defer func() {
|
||||
if err := recover(); err == nil {
|
||||
t.Error("Outline of an open path didn't panic")
|
||||
}
|
||||
}()
|
||||
var p clip.Path
|
||||
p.Begin(new(op.Ops))
|
||||
p.Line(f32.Pt(10, 10))
|
||||
clip.Outline{Path: p.End()}.Op()
|
||||
})
|
||||
t.Run("closed path", func(t *testing.T) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
t.Error("Outline of a closed path did panic")
|
||||
}
|
||||
}()
|
||||
var p clip.Path
|
||||
p.Begin(new(op.Ops))
|
||||
p.MoveTo(f32.Pt(300, 200))
|
||||
p.LineTo(f32.Pt(150, 200))
|
||||
p.MoveTo(f32.Pt(150, 200))
|
||||
p.ArcTo(f32.Pt(300, 200), f32.Pt(300, 200), 3*math.Pi/4)
|
||||
p.LineTo(f32.Pt(300, 200))
|
||||
p.Close()
|
||||
clip.Outline{Path: p.End()}.Op()
|
||||
})
|
||||
}
|
||||
|
||||
func TestPathBegin(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user