diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2020-11-17 16:49:19 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2020-11-17 19:25:42 +0100 |
commit | 8b8a988f38b704e466211bb91a3269756c34222b (patch) | |
tree | a624280e23a7949334d010a9e3774ac1f8b2bdb4 /vcl/skia | |
parent | 97f084b10caa971ee08730c80a3c3cde85c9475e (diff) |
implement also axial gradient for skia
Change-Id: Ie708250f970f2ce08c8c89e4bf001a5df23b99bb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106015
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'vcl/skia')
-rw-r--r-- | vcl/skia/gdiimpl.cxx | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index d89ec093a964..1f1c4002f94d 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -1807,6 +1807,7 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon, const Gradient& rGradient) { if (rGradient.GetStyle() != GradientStyle::Linear + && rGradient.GetStyle() != GradientStyle::Axial && rGradient.GetStyle() != GradientStyle::Radial) return false; // unsupported if (rGradient.GetSteps() != 0) @@ -1852,6 +1853,18 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon, SkScalar pos[2] = { SkDoubleToScalar(aGradient.GetBorder() / 100.0), 1.0 }; shader = SkGradientShader::MakeLinear(points, colors, pos, 2, SkTileMode::kClamp); } + else if (rGradient.GetStyle() == GradientStyle::Axial) + { + tools::Polygon aPoly(aBoundRect); + aPoly.Rotate(aCenter, aGradient.GetAngle() % Degree10(3600)); + SkPoint points[2] = { SkPoint::Make(toSkX(aPoly[0].X()), toSkY(aPoly[0].Y())), + SkPoint::Make(toSkX(aPoly[1].X()), toSkY(aPoly[1].Y())) }; + SkColor colors[3] = { endColor, startColor, endColor }; + SkScalar border = SkDoubleToScalar(aGradient.GetBorder() / 100.0); + SkScalar pos[3] + = { std::min<SkScalar>(border, 0.5), 0.5, std::max<SkScalar>(1 - border, 0.5) }; + shader = SkGradientShader::MakeLinear(points, colors, pos, 3, SkTileMode::kClamp); + } else { // Move the center by (-1,-1) (the default VCL algorithm is a bit off-center that way, |