[Libreoffice-commits] core.git: vcl/skia

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Fri Sep 25 17:30:29 UTC 2020


 vcl/skia/gdiimpl.cxx |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

New commits:
commit f3ca55e78799934c19ae66a822397d98b7997fa9
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Fri Sep 25 10:40:36 2020 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Fri Sep 25 19:29:52 2020 +0200

    Skia drawGradient() tweaks
    
    Change-Id: Id16a714c19c42b7071162107cbaa96c4ea95674d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103373
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 0adaf301a321..fc384d58f78e 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -1798,8 +1798,6 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon,
     Point aCenter;
     aGradient.SetAngle(aGradient.GetAngle() + 2700);
     aGradient.GetBoundRect(boundRect, aBoundRect, aCenter);
-    tools::Polygon aPoly(aBoundRect);
-    aPoly.Rotate(aCenter, aGradient.GetAngle() % 3600);
 
     SkColor startColor
         = toSkColorWithIntensity(rGradient.GetStartColor(), rGradient.GetStartIntensity());
@@ -1808,6 +1806,8 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon,
     sk_sp<SkShader> shader;
     if (rGradient.GetStyle() == GradientStyle::Linear)
     {
+        tools::Polygon aPoly(aBoundRect);
+        aPoly.Rotate(aCenter, aGradient.GetAngle() % 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[2] = { startColor, endColor };
@@ -1816,15 +1816,17 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon,
     }
     else
     {
-        // Move the center by (-1,-1) (the default VCL algorithm is a bit off-center that way).
+        // Move the center by (-1,-1) (the default VCL algorithm is a bit off-center that way,
+        // Skia is the opposite way).
         SkPoint center = SkPoint::Make(toSkX(aCenter.X()) - 1, toSkY(aCenter.Y()) - 1);
-        SkScalar radius = std::max(aBoundRect.GetWidth() / 2, aBoundRect.GetHeight() / 2);
+        SkScalar radius = std::max(aBoundRect.GetWidth() / 2.0, aBoundRect.GetHeight() / 2.0);
         SkColor colors[2] = { endColor, startColor };
         SkScalar pos[2] = { SkDoubleToScalar(aGradient.GetBorder() / 100.0), 1.0 };
         shader = SkGradientShader::MakeRadial(center, radius, colors, pos, 2, SkTileMode::kClamp);
     }
 
     SkPaint paint;
+    paint.setAntiAlias(mParent.getAntiAliasB2DDraw());
     paint.setShader(shader);
     getDrawCanvas()->drawPath(path, paint);
     postDraw();
@@ -1856,6 +1858,7 @@ bool SkiaSalGraphicsImpl::implDrawGradient(const basegfx::B2DPolyPolygon& rPolyP
     sk_sp<SkShader> shader = SkGradientShader::MakeLinear(points, colors.data(), pos.data(),
                                                           colors.size(), SkTileMode::kDecal);
     SkPaint paint;
+    paint.setAntiAlias(mParent.getAntiAliasB2DDraw());
     paint.setShader(shader);
     getDrawCanvas()->drawPath(path, paint);
     addXorRegion(path.getBounds());


More information about the Libreoffice-commits mailing list