svx/source/sdr/overlay/overlayselection.cxx |   98 +++++++++++++---------------
 1 file changed, 48 insertions(+), 50 deletions(-)

New commits:
commit 7b1405689d4246e0e37e8759f03e1962af964cec
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Fri Apr 19 22:56:04 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Apr 20 07:42:08 2024 +0200

    reduce the number of drawing primitives we create in OverlaySelection
    
    and flatten it a little
    
    Change-Id: I3377f832658c504a2541c6994f7386adad06b0e4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166321
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/svx/source/sdr/overlay/overlayselection.cxx 
b/svx/source/sdr/overlay/overlayselection.cxx
index 89ef1202e125..9644650263c9 100644
--- a/svx/source/sdr/overlay/overlayselection.cxx
+++ b/svx/source/sdr/overlay/overlayselection.cxx
@@ -92,63 +92,61 @@ namespace sdr::overlay
         drawinglayer::primitive2d::Primitive2DContainer 
OverlaySelection::createOverlayObjectPrimitive2DSequence()
         {
             drawinglayer::primitive2d::Primitive2DContainer aRetval;
-            const sal_uInt32 nCount(getRanges().size());
+            const sal_uInt32 nCount(maRanges.size());
 
-            if(nCount)
-            {
-                // create range primitives
-                const bool bInvert(OverlayType::Invert == maLastOverlayType);
-                basegfx::BColor aRGBColor(getBaseColor().getBColor());
-                aRetval.resize(nCount);
+            if(!nCount)
+                return aRetval;
 
-                if(bInvert)
-                {
-                    // force color to white for invert to get a full invert
-                    aRGBColor = basegfx::BColor(1.0, 1.0, 1.0);
-                }
+            // create range primitives
+            const bool bInvert(OverlayType::Invert == maLastOverlayType);
+            basegfx::BColor aRGBColor(getBaseColor().getBColor());
+            if(bInvert)
+            {
+                // force color to white for invert to get a full invert
+                aRGBColor = basegfx::BColor(1.0, 1.0, 1.0);
+            }
 
-                for(sal_uInt32 a(0);a < nCount; a++)
-                {
-                    const basegfx::B2DPolygon 
aPolygon(basegfx::utils::createPolygonFromRect(maRanges[a]));
-                    aRetval[a] =
-                        new 
drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
-                            basegfx::B2DPolyPolygon(aPolygon),
-                            aRGBColor);
-                }
+            basegfx::B2DPolyPolygon aPolyPolygon;
+            aPolyPolygon.reserve(nCount);
+            for(sal_uInt32 a(0);a < nCount; a++)
+                
aPolyPolygon.append(basegfx::utils::createPolygonFromRect(maRanges[a]));
+            aRetval.append(
+                new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D(
+                    std::move(aPolyPolygon),
+                    aRGBColor));
 
-                if(bInvert)
+            if(bInvert)
+            {
+                // embed all in invert primitive
+                aRetval = drawinglayer::primitive2d::Primitive2DContainer {
+                        new drawinglayer::primitive2d::InvertPrimitive2D(
+                            std::move(aRetval))
+                };
+            }
+            else if(OverlayType::Transparent == maLastOverlayType)
+            {
+                // embed all rectangles in transparent paint
+                const double fTransparence(mnLastTransparence / 100.0);
+                drawinglayer::primitive2d::Primitive2DReference 
aUnifiedTransparence(
+                    new 
drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
+                        std::move(aRetval),
+                        fTransparence));
+
+                if(mbBorder)
                 {
-                    // embed all in invert primitive
-                    aRetval = drawinglayer::primitive2d::Primitive2DContainer {
-                            new drawinglayer::primitive2d::InvertPrimitive2D(
-                                std::move(aRetval))
-                    };
+                    basegfx::B2DPolyPolygon 
aBorderPolyPolygon(impCombineRangesToPolyPolygon(maRanges));
+                    drawinglayer::primitive2d::Primitive2DReference 
aSelectionOutline(
+                        new 
drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D(
+                            std::move(aBorderPolyPolygon),
+                            aRGBColor));
+
+                    // add both to result
+                    aRetval = drawinglayer::primitive2d::Primitive2DContainer 
{ aUnifiedTransparence, aSelectionOutline };
                 }
-                else if(OverlayType::Transparent == maLastOverlayType)
+                else
                 {
-                    // embed all rectangles in transparent paint
-                    const double fTransparence(mnLastTransparence / 100.0);
-                    const drawinglayer::primitive2d::Primitive2DReference 
aUnifiedTransparence(
-                        new 
drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
-                            std::move(aRetval),
-                            fTransparence));
-
-                    if(mbBorder)
-                    {
-                        basegfx::B2DPolyPolygon 
aPolyPolygon(impCombineRangesToPolyPolygon(getRanges()));
-                        const drawinglayer::primitive2d::Primitive2DReference 
aSelectionOutline(
-                            new 
drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D(
-                                std::move(aPolyPolygon),
-                                aRGBColor));
-
-                        // add both to result
-                        aRetval = 
drawinglayer::primitive2d::Primitive2DContainer { aUnifiedTransparence, 
aSelectionOutline };
-                    }
-                    else
-                    {
-                        // just add transparent part
-                        aRetval = 
drawinglayer::primitive2d::Primitive2DContainer { aUnifiedTransparence };
-                    }
+                    // just add transparent part
+                    aRetval = drawinglayer::primitive2d::Primitive2DContainer 
{ aUnifiedTransparence };
                 }
             }
 

Reply via email to