func (r *Dasher) lineF(b fixed.Point26_6) {
	var bnorm fixed.Point26_6
	a := r.a  
	ba := b.Sub(a)
	segLen := Length(ba)
	var nlt fixed.Int26_6
	if b == r.leadPoint.P {  
		bnorm = r.leadPoint.TNorm  
	} else {
		bnorm = turnPort90(ToLength(b.Sub(a), r.u))  
	}
	for segLen+r.deltaDash > r.Dashes[r.dashPlace] {
		nl := r.Dashes[r.dashPlace] - r.deltaDash
		nlt += nl
		r.dashLineStrokeBit(a.Add(ToLength(ba, nlt)), bnorm, false)
		r.dashIsGap = !r.dashIsGap
		segLen -= nl
		r.deltaDash = 0
		r.dashPlace++
		if r.dashPlace == len(r.Dashes) {
			r.dashPlace = 0
		}
	}
	r.deltaDash += segLen
	r.dashLineStrokeBit(b, bnorm, true)
}
lineF overides stroker lineF to modify the the call as below
while performing the join in a dashed stroke.
package rasterx
import (
	"golang.org/x/image/math/fixed"
)
type Dasher struct {
	Stroker
	Dashes                    []fixed.Int26_6
	dashPlace                 int
	firstDashIsGap, dashIsGap bool
	deltaDash, DashOffset     fixed.Int26_6
	sgm                       Rasterx
}
func (r *Dasher) joinF() {
	if len(r.Dashes) == 0 || !r.inStroke || !r.dashIsGap {
		r.Stroker.joinF()
	}
}
func (r *Dasher) Start(a fixed.Point26_6) {
	if len(r.Dashes) > 0 {
		r.deltaDash = r.DashOffset
		r.dashIsGap = false
		r.dashPlace = 0
		for r.deltaDash > r.Dashes[r.dashPlace] {
			r.deltaDash -= r.Dashes[r.dashPlace]
			r.dashIsGap = !r.dashIsGap
			r.dashPlace++
			if r.dashPlace == len(r.Dashes) {
				r.dashPlace = 0
			}
		}
		r.firstDashIsGap = r.dashIsGap
	}
	r.Stroker.Start(a)
}