mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 17:27:08 +08:00
1 parent
777d0c7c89
commit
e5e07f92cd
7 files changed
+167
-142
No files matched your search
+26
-2
@@ -56,15 +56,22 @@ func resolveShdPaint(ctx *canvas.Context, paint any) (any, *canvas.Path, canvas.
|
||||
if !ok {
|
||||
return paint, nil, canvas.Identity
|
||||
}
|
||||
if canvas.Equal(s.view.Det(), 0) {
|
||||
return nil, &canvas.Path{}, canvas.Identity
|
||||
}
|
||||
switch g := s.gradient.(type) {
|
||||
case *canvas.LinearGradient:
|
||||
clip := axialShdClip(ctx, g, s.extend)
|
||||
bounds := shdCanvasBounds(ctx).Transform(s.view.Inv())
|
||||
clip := axialShdClip(g, s.extend, bounds)
|
||||
if clip != nil && s.view != canvas.Identity {
|
||||
clip = clip.Transform(s.view)
|
||||
}
|
||||
if s.mapType != "Reflect" {
|
||||
return g, clip, s.view
|
||||
}
|
||||
d := g.End.Sub(g.Start)
|
||||
axis := canvas.Matrix{{d.X, -d.Y, g.Start.X}, {d.Y, d.X, g.Start.Y}}
|
||||
area := shdCanvasBounds(ctx).Transform(axis.Inv())
|
||||
area := bounds.Transform(axis.Inv())
|
||||
lo, hi := s.rangeLimits(area.X0, area.X1)
|
||||
if hi <= lo {
|
||||
return g, &canvas.Path{}, s.view
|
||||
@@ -108,6 +115,23 @@ func resolveShdPaint(ctx *canvas.Context, paint any) (any, *canvas.Path, canvas.
|
||||
return s.gradient, nil, s.view
|
||||
}
|
||||
|
||||
// transformShdPaint 应用渐变的父级坐标变换
|
||||
// 入参: paint 画刷, parentCTM 父级变换矩阵, bx 边界X坐标, by 边界Y坐标, pageH 页面高度, boundaryInCTM 边界是否参与父级变换
|
||||
func transformShdPaint(paint any, parentCTM *Matrix, bx, by, pageH float64, boundaryInCTM bool) {
|
||||
s, ok := paint.(*shdPaint)
|
||||
if !ok || parentCTM == nil {
|
||||
return
|
||||
}
|
||||
ctm := *parentCTM
|
||||
if !boundaryInCTM {
|
||||
ctm = TranslationMatrix(bx, by).Multiply(ctm).Multiply(TranslationMatrix(-bx, -by))
|
||||
}
|
||||
s.view = canvas.Matrix{
|
||||
{ctm.a, -ctm.c, ctm.c*pageH + ctm.e},
|
||||
{-ctm.b, ctm.d, pageH*(1-ctm.d) - ctm.f},
|
||||
}.Mul(s.view)
|
||||
}
|
||||
|
||||
// drawShdPath 绘制渐变路径并保持图形轮廓不变
|
||||
// 入参: ctx 画布上下文, path 填充路径, view 渐变变换
|
||||
func drawShdPath(ctx *canvas.Context, path *canvas.Path, view canvas.Matrix) {
|
||||
|
||||
Reference in new issue
Block a user