line dash now gets properly scaled
This commit is contained in:
parent
99b9763f00
commit
7ce0b7bf9d
1 changed files with 16 additions and 12 deletions
28
paths.go
28
paths.go
|
@ -215,26 +215,28 @@ func (cv *Canvas) applyLineDash(path []pathPoint) []pathPoint {
|
||||||
|
|
||||||
path2 := make([]pathPoint, 0, len(path)*2)
|
path2 := make([]pathPoint, 0, len(path)*2)
|
||||||
|
|
||||||
var lp vec
|
var lp pathPoint
|
||||||
for i, pp := range path {
|
for i, pp := range path {
|
||||||
if i == 0 || pp.flags&pathMove != 0 {
|
if i == 0 || pp.flags&pathMove != 0 {
|
||||||
path2 = append(path2, pp)
|
path2 = append(path2, pp)
|
||||||
lp = pp.tf
|
lp = pp
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
tp := pp.tf
|
v := pp.pos.sub(lp.pos)
|
||||||
v := tp.sub(lp)
|
vtf := pp.tf.sub(lp.tf)
|
||||||
vl := v.len()
|
vl := v.len()
|
||||||
prev := ldo
|
prev := ldo
|
||||||
for vl > 0 {
|
for vl > 0 {
|
||||||
draw := ldp%2 == 0
|
draw := ldp%2 == 0
|
||||||
p := tp
|
newp := pathPoint{pos: pp.pos, tf: pp.tf}
|
||||||
ldo += vl
|
ldo += vl
|
||||||
if ldo > cv.state.lineDash[ldp] {
|
if ldo > cv.state.lineDash[ldp] {
|
||||||
ldo = 0
|
ldo = 0
|
||||||
dl := cv.state.lineDash[ldp] - prev
|
dl := cv.state.lineDash[ldp] - prev
|
||||||
p = lp.add(v.mulf(dl / vl))
|
dist := dl / vl
|
||||||
|
newp.pos = lp.pos.add(v.mulf(dist))
|
||||||
|
newp.tf = lp.tf.add(vtf.mulf(dist))
|
||||||
vl -= dl
|
vl -= dl
|
||||||
ldp++
|
ldp++
|
||||||
ldp %= len(cv.state.lineDash)
|
ldp %= len(cv.state.lineDash)
|
||||||
|
@ -244,17 +246,19 @@ func (cv *Canvas) applyLineDash(path []pathPoint) []pathPoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
if draw {
|
if draw {
|
||||||
path2[len(path2)-1].next = p
|
path2[len(path2)-1].next = newp.tf
|
||||||
path2[len(path2)-1].flags |= pathAttach
|
path2[len(path2)-1].flags |= pathAttach
|
||||||
path2 = append(path2, pathPoint{pos: p, tf: p})
|
path2 = append(path2, newp)
|
||||||
} else {
|
} else {
|
||||||
path2 = append(path2, pathPoint{pos: p, tf: p, flags: pathMove})
|
newp.flags = pathMove
|
||||||
|
path2 = append(path2, newp)
|
||||||
}
|
}
|
||||||
|
|
||||||
lp = p
|
lp = newp
|
||||||
v = tp.sub(lp)
|
v = pp.pos.sub(lp.pos)
|
||||||
|
vtf = pp.tf.sub(lp.tf)
|
||||||
}
|
}
|
||||||
lp = tp
|
lp = pp
|
||||||
}
|
}
|
||||||
|
|
||||||
return path2
|
return path2
|
||||||
|
|
Loading…
Reference in a new issue