[Libreoffice-commits] core.git: canvas/source

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Tue Sep 29 07:55:53 UTC 2020


 canvas/source/vcl/canvashelper.cxx |   44 ++++++++++++++-----------------------
 1 file changed, 17 insertions(+), 27 deletions(-)

New commits:
commit 748723883a626b499f605d7a5bad92e25b69a0e4
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Thu Sep 24 13:34:51 2020 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Tue Sep 29 09:55:14 2020 +0200

    Revert "don't split polypolygon in canvas if not needed" (tdf#136933)
    
    With the doc from tdf#136933 basegfx::utils::createNonzeroConform()
    gets called with huge polygons, which is very expensive. Revert
    this, I'll fix the Skia problem by directly trying to draw
    the stroked polygon with VCL.
    
    This reverts commit b0788ff11481568b413ff6e4c3ea4871984af974.
    
    Change-Id: I19b3435811b6ea38d83bea08056802aac76bf45c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103312
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/canvas/source/vcl/canvashelper.cxx b/canvas/source/vcl/canvashelper.cxx
index 2e8476649e3d..a9c9e1eda6d3 100644
--- a/canvas/source/vcl/canvashelper.cxx
+++ b/canvas/source/vcl/canvashelper.cxx
@@ -25,7 +25,6 @@
 #include <basegfx/polygon/b2dlinegeometry.hxx>
 #include <basegfx/polygon/b2dpolygon.hxx>
 #include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <basegfx/range/b2drectangle.hxx>
 #include <basegfx/utils/canvastools.hxx>
@@ -395,33 +394,24 @@ namespace vclcanvas
             // user coordinates.
             aStrokedPolyPoly.transform( aMatrix );
 
-            if(aStrokedPolyPoly.isClosed())
-            {
-                // Note: the generated stroke poly-polygon is NOT free of
-                // self-intersections. Therefore, if we would render it
-                // directly via OutDev::DrawPolyPolygon(), on/off fill would
-                // generate off areas on those self-intersections.
-                aStrokedPolyPoly = basegfx::utils::createNonzeroConform( aStrokedPolyPoly );
-                mpOutDevProvider->getOutDev().DrawPolyPolygon( aStrokedPolyPoly );
-                if( mp2ndOutDevProvider )
-                    mp2ndOutDevProvider->getOutDev().DrawPolyPolygon( aStrokedPolyPoly );
-            }
-            else
+            // TODO(F2): When using alpha here, must handle that via
+            // temporary surface or somesuch.
+
+            // Note: the generated stroke poly-polygon is NOT free of
+            // self-intersections. Therefore, if we would render it
+            // via OutDev::DrawPolyPolygon(), on/off fill would
+            // generate off areas on those self-intersections.
+            for( sal_uInt32 i=0; i<aStrokedPolyPoly.count(); ++i )
             {
-                // TODO(F2): When using alpha here, must handle that via
-                // temporary surface or somesuch.
-                for( sal_uInt32 i=0; i<aStrokedPolyPoly.count(); ++i )
-                {
-                    const basegfx::B2DPolygon& polygon = aStrokedPolyPoly.getB2DPolygon( i );
-                    if( polygon.isClosed()) {
-                        mpOutDevProvider->getOutDev().DrawPolygon( polygon );
-                        if( mp2ndOutDevProvider )
-                            mp2ndOutDevProvider->getOutDev().DrawPolygon( polygon );
-                    } else {
-                        mpOutDevProvider->getOutDev().DrawPolyLine( polygon );
-                        if( mp2ndOutDevProvider )
-                            mp2ndOutDevProvider->getOutDev().DrawPolyLine( polygon );
-                    }
+                const basegfx::B2DPolygon& polygon = aStrokedPolyPoly.getB2DPolygon( i );
+                if( polygon.isClosed()) {
+                    mpOutDevProvider->getOutDev().DrawPolygon( polygon );
+                    if( mp2ndOutDevProvider )
+                        mp2ndOutDevProvider->getOutDev().DrawPolygon( polygon );
+                } else {
+                    mpOutDevProvider->getOutDev().DrawPolyLine( polygon );
+                    if( mp2ndOutDevProvider )
+                        mp2ndOutDevProvider->getOutDev().DrawPolyLine( polygon );
                 }
             }
         }


More information about the Libreoffice-commits mailing list