optimise ensureGeometry

for complex polygons, return early

Change-Id: Id4bb2311f84508d95a71a3f4353872164baabe6e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128354
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
index fae763c..8798d40 100644
--- a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
@@ -43,7 +43,8 @@ namespace sdr::contact
        {
        }

        static sal_uInt32 ensureGeometry(basegfx::B2DPolyPolygon& rUnitPolyPolygon)
        /// return true if polycount == 1
        static bool ensureGeometry(basegfx::B2DPolyPolygon& rUnitPolyPolygon)
        {
            sal_uInt32 nPolyCount(rUnitPolyPolygon.count());
            sal_uInt32 nPointCount(0);
@@ -51,6 +52,8 @@ namespace sdr::contact
            for(auto const& rPolygon : std::as_const(rUnitPolyPolygon))
            {
                nPointCount += rPolygon.count();
                if (nPointCount > 1)
                    return false;
            }

            if(!nPointCount)
@@ -64,7 +67,7 @@ namespace sdr::contact
                nPolyCount = 1;
            }

            return nPolyCount;
            return nPolyCount == 1;
        }

        void ViewContactOfSdrPathObj::createViewIndependentPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const
@@ -76,14 +79,14 @@ namespace sdr::contact
                    GetPathObj().getText(0),
                    false));
            basegfx::B2DPolyPolygon aUnitPolyPolygon(GetPathObj().GetPathPoly());
            sal_uInt32 nPolyCount(ensureGeometry(aUnitPolyPolygon));
            bool bPolyCountIsOne(ensureGeometry(aUnitPolyPolygon));

            // prepare object transformation and unit polygon (direct model data)
            basegfx::B2DHomMatrix aObjectMatrix;
            basegfx::B2DPolyPolygon aUnitDefinitionPolyPolygon;
            bool bIsLine(
                !aUnitPolyPolygon.areControlPointsUsed()
                && 1 == nPolyCount
                && bPolyCountIsOne
                && 2 == aUnitPolyPolygon.getB2DPolygon(0).count());

            if(bIsLine)
@@ -113,12 +116,12 @@ namespace sdr::contact

                    aUnitPolyPolygon = basegfx::utils::clipPolyPolygonOnRange(aUnitPolyPolygon,
                                                                       aClipRange, true, true);
                    nPolyCount = ensureGeometry(aUnitPolyPolygon);
                    bPolyCountIsOne = ensureGeometry(aUnitPolyPolygon);

                    // re-check that we have't been clipped out to oblivion
                    bIsLine =
                        !aUnitPolyPolygon.areControlPointsUsed()
                        && 1 == nPolyCount
                        && bPolyCountIsOne
                        && 2 == aUnitPolyPolygon.getB2DPolygon(0).count();
                }
            }