line widths now work more like the html5 canvas
This commit is contained in:
parent
a42e694c47
commit
0efc4c6d59
2 changed files with 19 additions and 3 deletions
10
canvas.go
10
canvas.go
|
@ -33,6 +33,7 @@ type drawState struct {
|
|||
font *Font
|
||||
fontSize float64
|
||||
textAlign textAlign
|
||||
lineAlpha float64
|
||||
lineWidth float64
|
||||
lineJoin lineJoin
|
||||
lineEnd lineEnd
|
||||
|
@ -474,7 +475,16 @@ func (cv *Canvas) useAlphaShader(style *drawStyle, alphaTexSlot int32) (vertexLo
|
|||
|
||||
// SetLineWidth sets the line width for any line drawing calls
|
||||
func (cv *Canvas) SetLineWidth(width float64) {
|
||||
if width < 0 {
|
||||
cv.state.lineWidth = 1
|
||||
cv.state.lineAlpha = 0
|
||||
} else if width < 1 {
|
||||
cv.state.lineWidth = 1
|
||||
cv.state.lineAlpha = width
|
||||
} else {
|
||||
cv.state.lineWidth = width
|
||||
cv.state.lineAlpha = 1
|
||||
}
|
||||
}
|
||||
|
||||
// SetFont sets the font and font size. The font parameter can be a font loaded
|
||||
|
|
10
paths.go
10
paths.go
|
@ -349,7 +349,7 @@ func (cv *Canvas) stroke(path []pathPoint) {
|
|||
float32(lp0[0]), float32(lp0[1]), float32(lp1[0]), float32(lp1[1]), float32(lp3[0]), float32(lp3[1]),
|
||||
float32(lp0[0]), float32(lp0[1]), float32(lp3[0]), float32(lp3[1]), float32(lp2[0]), float32(lp2[1]))
|
||||
|
||||
if p.flags&pathAttach != 0 {
|
||||
if p.flags&pathAttach != 0 && cv.state.lineWidth > 1 {
|
||||
tris = cv.lineJoint(p, p0, p1, p.next, lp0, lp1, lp2, lp3, tris)
|
||||
}
|
||||
|
||||
|
@ -378,7 +378,13 @@ func (cv *Canvas) stroke(path []pathPoint) {
|
|||
|
||||
gli.StencilFunc(gl_EQUAL, 1, 0xFF)
|
||||
|
||||
origAlpha := cv.state.globalAlpha
|
||||
if cv.state.lineAlpha < 1 {
|
||||
cv.state.globalAlpha *= cv.state.lineAlpha
|
||||
}
|
||||
vertex := cv.useShader(&cv.state.stroke)
|
||||
cv.state.globalAlpha = origAlpha
|
||||
|
||||
gli.EnableVertexAttribArray(vertex)
|
||||
gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, 0)
|
||||
gli.DrawArrays(gl_TRIANGLES, 0, 6)
|
||||
|
@ -681,7 +687,7 @@ func (cv *Canvas) StrokeRect(x, y, w, h float64) {
|
|||
path[1] = pathPoint{pos: v1, tf: v1t, next: v2t, flags: pathAttach}
|
||||
path[2] = pathPoint{pos: v2, tf: v2t, next: v3t, flags: pathAttach}
|
||||
path[3] = pathPoint{pos: v3, tf: v3t, next: v0t, flags: pathAttach}
|
||||
path[4] = pathPoint{pos: v0, tf: v0t}
|
||||
path[4] = pathPoint{pos: v0, tf: v0t, next: v1t, flags: pathAttach}
|
||||
cv.stroke(path[:])
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue