shadow global alpha fix

This commit is contained in:
Thomas Friedel 2019-04-24 12:34:36 +02:00
parent 312633710b
commit 0476a8a85f
4 changed files with 10 additions and 7 deletions

View file

@ -169,7 +169,7 @@ func (cv *Canvas) DrawImage(image interface{}, coords ...float64) {
data[2] = cv.tf(vec{dx + dw, dy + dh}) data[2] = cv.tf(vec{dx + dw, dy + dh})
data[3] = cv.tf(vec{dx + dw, dy}) data[3] = cv.tf(vec{dx + dw, dy})
cv.drawShadow2(data[:], nil) cv.drawShadow(data[:], nil)
cv.b.DrawImage(img.img, sx, sy, sw, sh, data, cv.state.globalAlpha) cv.b.DrawImage(img.img, sx, sy, sw, sh, data, cv.state.globalAlpha)
} }

View file

@ -95,7 +95,7 @@ func (cv *Canvas) strokePath(path *Path2D, inv mat, doInv bool) {
var triBuf [500][2]float64 var triBuf [500][2]float64
tris := cv.strokeTris(path, inv, doInv, triBuf[:0]) tris := cv.strokeTris(path, inv, doInv, triBuf[:0])
cv.drawShadow2(tris, nil) cv.drawShadow(tris, nil)
stl := cv.backendFillStyle(&cv.state.stroke, 1) stl := cv.backendFillStyle(&cv.state.stroke, 1)
cv.b.Fill(&stl, tris) cv.b.Fill(&stl, tris)
@ -370,7 +370,7 @@ func (cv *Canvas) fillPath(path *Path2D, tf mat) {
return return
} }
cv.drawShadow2(tris, nil) cv.drawShadow(tris, nil)
stl := cv.backendFillStyle(&cv.state.fill, 1) stl := cv.backendFillStyle(&cv.state.fill, 1)
cv.b.Fill(&stl, tris) cv.b.Fill(&stl, tris)
@ -463,7 +463,7 @@ func (cv *Canvas) FillRect(x, y, w, h float64) {
data := [4][2]float64{{p0[0], p0[1]}, {p1[0], p1[1]}, {p2[0], p2[1]}, {p3[0], p3[1]}} data := [4][2]float64{{p0[0], p0[1]}, {p1[0], p1[1]}, {p2[0], p2[1]}, {p3[0], p3[1]}}
cv.drawShadow2(data[:], nil) cv.drawShadow(data[:], nil)
stl := cv.backendFillStyle(&cv.state.fill, 1) stl := cv.backendFillStyle(&cv.state.fill, 1)
cv.b.Fill(&stl, data[:]) cv.b.Fill(&stl, data[:])

View file

@ -2,11 +2,12 @@ package canvas
import ( import (
"image" "image"
"math"
"github.com/tfriedel6/canvas/backend/backendbase" "github.com/tfriedel6/canvas/backend/backendbase"
) )
func (cv *Canvas) drawShadow2(pts [][2]float64, mask *image.Alpha) { func (cv *Canvas) drawShadow(pts [][2]float64, mask *image.Alpha) {
if cv.state.shadowColor.A == 0 { if cv.state.shadowColor.A == 0 {
return return
} }
@ -26,7 +27,9 @@ func (cv *Canvas) drawShadow2(pts [][2]float64, mask *image.Alpha) {
}) })
} }
style := backendbase.FillStyle{Color: cv.state.shadowColor, Blur: cv.state.shadowBlur} color := cv.state.shadowColor
color.A = uint8(math.Round(((float64(color.A) / 255.0) * cv.state.globalAlpha) * 255.0))
style := backendbase.FillStyle{Color: color, Blur: cv.state.shadowBlur}
if mask != nil { if mask != nil {
if len(cv.shadowBuf) != 4 { if len(cv.shadowBuf) != 4 {
panic("invalid number of points to fill with mask, must be 4") panic("invalid number of points to fill with mask, must be 4")

View file

@ -215,7 +215,7 @@ func (cv *Canvas) FillText(str string, x, y float64) {
mask := textImage.SubImage(image.Rect(0, 0, strWidth, strHeight)).(*image.Alpha) mask := textImage.SubImage(image.Rect(0, 0, strWidth, strHeight)).(*image.Alpha)
cv.drawShadow2(pts[:], mask) cv.drawShadow(pts[:], mask)
stl := cv.backendFillStyle(&cv.state.fill, 1) stl := cv.backendFillStyle(&cv.state.fill, 1)
cv.b.FillImageMask(&stl, mask, pts[:]) cv.b.FillImageMask(&stl, mask, pts[:])