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 }; } }