line dash now gets properly scaled

This commit is contained in:
Thomas Friedel 2019-01-24 10:50:39 +01:00
parent 99b9763f00
commit 7ce0b7bf9d

View file

@ -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