diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2020-07-02 10:07:24 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2020-07-02 14:12:41 +0200 |
commit | b07f93c31ba4b652b92d7b8e40edb3ca584f04f6 (patch) | |
tree | 07c27ad23a5a16d00752e17d618103d174819f6e | |
parent | bbb35541d8e0a2b041ed05ccb23307afa5371211 (diff) |
do not convert straight lines in polygons to cubic for SkPath
Change-Id: If8a088daa7971509cf12b508f956bed28a6c053b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97724
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
-rw-r--r-- | vcl/skia/gdiimpl.cxx | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index 3dd70b822411..addb0903c499 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -89,20 +89,25 @@ void addPolygonToPath(const basegfx::B2DPolygon& rPolygon, SkPath& rPath) basegfx::B2DPoint aPreviousControlPoint = rPolygon.getNextControlPoint(nPreviousIndex); basegfx::B2DPoint aCurrentControlPoint = rPolygon.getPrevControlPoint(nCurrentIndex); - if (aPreviousControlPoint.equal(aPreviousPoint)) - { - aPreviousControlPoint - = aPreviousPoint + ((aPreviousControlPoint - aCurrentPoint) * 0.0005); - } - - if (aCurrentControlPoint.equal(aCurrentPoint)) + if (aPreviousControlPoint.equal(aPreviousPoint) + && aCurrentControlPoint.equal(aCurrentPoint)) + rPath.lineTo(aCurrentPoint.getX(), aCurrentPoint.getY()); // a straight line + else { - aCurrentControlPoint - = aCurrentPoint + ((aCurrentControlPoint - aPreviousPoint) * 0.0005); + if (aPreviousControlPoint.equal(aPreviousPoint)) + { + aPreviousControlPoint + = aPreviousPoint + ((aPreviousControlPoint - aCurrentPoint) * 0.0005); + } + if (aCurrentControlPoint.equal(aCurrentPoint)) + { + aCurrentControlPoint + = aCurrentPoint + ((aCurrentControlPoint - aPreviousPoint) * 0.0005); + } + rPath.cubicTo(aPreviousControlPoint.getX(), aPreviousControlPoint.getY(), + aCurrentControlPoint.getX(), aCurrentControlPoint.getY(), + aCurrentPoint.getX(), aCurrentPoint.getY()); } - rPath.cubicTo(aPreviousControlPoint.getX(), aPreviousControlPoint.getY(), - aCurrentControlPoint.getX(), aCurrentControlPoint.getY(), - aCurrentPoint.getX(), aCurrentPoint.getY()); } aPreviousPoint = aCurrentPoint; nPreviousIndex = nCurrentIndex; |