diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-01-30 10:11:09 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-01-30 10:00:33 +0000 |
commit | e2c811e6f9c0b2de47153a70a783f4d808eab3ab (patch) | |
tree | 9b20060ddb0ed012986e76ee38abaaefaf65b595 /svx/source | |
parent | db88842170a041267b55dda64f8280a1394202b8 (diff) |
tdf#150534 reduce allocation in SdrFrameBorderPrimitive2D
Change-Id: Ib55ce7882e87823cca95e00cb5ae990213d1e766
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146339
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx/source')
-rw-r--r-- | svx/source/dialog/framelinkarray.cxx | 25 | ||||
-rw-r--r-- | svx/source/sdr/primitive2d/sdrframeborderprimitive2d.cxx | 14 |
2 files changed, 18 insertions, 21 deletions
diff --git a/svx/source/dialog/framelinkarray.cxx b/svx/source/dialog/framelinkarray.cxx index a14279f329f1..322e2225d5e6 100644 --- a/svx/source/dialog/framelinkarray.cxx +++ b/svx/source/dialog/framelinkarray.cxx @@ -1275,8 +1275,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( const sal_Int32 nEndCol(nLastCol < GetColCount() - 1 ? nLastCol + 1 : nLastCol); // prepare SdrFrameBorderDataVector - std::shared_ptr<drawinglayer::primitive2d::SdrFrameBorderDataVector> aData( - std::make_shared<drawinglayer::primitive2d::SdrFrameBorderDataVector>()); + drawinglayer::primitive2d::SdrFrameBorderDataVector aData; // remember for which merged cells crossed lines were already created. To // do so, hold the sal_Int32 cell index in a set for fast check @@ -1328,7 +1327,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if(rTop.IsUsed()) { - HelperCreateHorizontalEntry(*this, rTop, nCol, nRow, aOrigin, aX, aY, *aData, true, pForceColor); + HelperCreateHorizontalEntry(*this, rTop, nCol, nRow, aOrigin, aX, aY, aData, true, pForceColor); } } @@ -1340,7 +1339,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if(rBottom.IsUsed()) { - HelperCreateHorizontalEntry(*this, rBottom, nCol, nRow + 1, aOrigin, aX, aY, *aData, false, pForceColor); + HelperCreateHorizontalEntry(*this, rBottom, nCol, nRow + 1, aOrigin, aX, aY, aData, false, pForceColor); } } @@ -1353,7 +1352,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if(rLeft.IsUsed()) { - HelperCreateVerticalEntry(*this, rLeft, nCol, nRow, aOrigin, aX, aY, *aData, true, pForceColor); + HelperCreateVerticalEntry(*this, rLeft, nCol, nRow, aOrigin, aX, aY, aData, true, pForceColor); } } @@ -1365,7 +1364,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if(rRight.IsUsed()) { - HelperCreateVerticalEntry(*this, rRight, nCol + 1, nRow, aOrigin, aX, aY, *aData, false, pForceColor); + HelperCreateVerticalEntry(*this, rRight, nCol + 1, nRow, aOrigin, aX, aY, aData, false, pForceColor); } } @@ -1441,12 +1440,12 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( } // create top-left to bottom-right geometry - HelperCreateTLBREntry(*this, rTLBR, *aData, aOrigin, aX, aY, + HelperCreateTLBREntry(*this, rTLBR, aData, aOrigin, aX, aY, nColLeft, nRowTop, nColRight, nRowBottom, pForceColor, bNeedToClip ? &aClipRange : nullptr); // create bottom-left to top-right geometry - HelperCreateBLTREntry(*this, rBLTR, *aData, aOrigin, aX, aY, + HelperCreateBLTREntry(*this, rBLTR, aData, aOrigin, aX, aY, nColLeft, nRowTop, nColRight, nRowBottom, pForceColor, bNeedToClip ? &aClipRange : nullptr); } @@ -1465,10 +1464,10 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if(rTLBR.IsUsed() || rBLTR.IsUsed()) { - HelperCreateTLBREntry(*this, rTLBR, *aData, aOrigin, aX, aY, + HelperCreateTLBREntry(*this, rTLBR, aData, aOrigin, aX, aY, nCol, nRow, nCol, nRow, pForceColor, nullptr); - HelperCreateBLTREntry(*this, rBLTR, *aData, aOrigin, aX, aY, + HelperCreateBLTREntry(*this, rBLTR, aData, aOrigin, aX, aY, nCol, nRow, nCol, nRow, pForceColor, nullptr); } } @@ -1485,7 +1484,7 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( if (rLeft.IsUsed()) { - HelperCreateVerticalEntry(*this, rLeft, nCol, nRow, aOrigin, aX, aY, *aData, true, pForceColor); + HelperCreateVerticalEntry(*this, rLeft, nCol, nRow, aOrigin, aX, aY, aData, true, pForceColor); } } } @@ -1500,12 +1499,12 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( // SdrFrameBorderDataVector is used drawinglayer::primitive2d::Primitive2DContainer aSequence; - if(!aData->empty()) + if(!aData.empty()) { aSequence.append( drawinglayer::primitive2d::Primitive2DReference( new drawinglayer::primitive2d::SdrFrameBorderPrimitive2D( - aData, + std::move(aData), true))); // force visualization to minimal one discrete unit (pixel) } diff --git a/svx/source/sdr/primitive2d/sdrframeborderprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrframeborderprimitive2d.cxx index b2f010395fbd..e2f2fa772dd8 100644 --- a/svx/source/sdr/primitive2d/sdrframeborderprimitive2d.cxx +++ b/svx/source/sdr/primitive2d/sdrframeborderprimitive2d.cxx @@ -767,7 +767,7 @@ namespace drawinglayer::primitive2d Primitive2DContainer& rContainer, const geometry::ViewInformation2D& /*aViewInformation*/) const { - if(!getFrameBorders()) + if(getFrameBorders().empty()) { return; } @@ -783,7 +783,7 @@ namespace drawinglayer::primitive2d { // decompose all buffered SdrFrameBorderData entries and try to merge them // to reduce existing number of BorderLinePrimitive2D(s) - for(const auto& rCandidate : *getFrameBorders()) + for(const auto& rCandidate : getFrameBorders()) { // get decomposition on one SdrFrameBorderData entry Primitive2DContainer aPartial; @@ -847,17 +847,17 @@ namespace drawinglayer::primitive2d } SdrFrameBorderPrimitive2D::SdrFrameBorderPrimitive2D( - std::shared_ptr<SdrFrameBorderDataVector>& rFrameBorders, + SdrFrameBorderDataVector&& rFrameBorders, bool bForceToSingleDiscreteUnit) : maFrameBorders(std::move(rFrameBorders)), mfMinimalNonZeroBorderWidth(0.0), mfMinimalNonZeroBorderWidthUsedForDecompose(0.0), mbForceToSingleDiscreteUnit(bForceToSingleDiscreteUnit) { - if(getFrameBorders() && doForceToSingleDiscreteUnit()) + if(!getFrameBorders().empty() && doForceToSingleDiscreteUnit()) { // detect used minimal non-zero partial border width - for(const auto& rCandidate : *getFrameBorders()) + for(const auto& rCandidate : getFrameBorders()) { mfMinimalNonZeroBorderWidth = getMinimalNonZeroValue( mfMinimalNonZeroBorderWidth, @@ -872,9 +872,7 @@ namespace drawinglayer::primitive2d { const SdrFrameBorderPrimitive2D& rCompare = static_cast<const SdrFrameBorderPrimitive2D&>(rPrimitive); - return (getFrameBorders() == rCompare.getFrameBorders() - || (getFrameBorders() && rCompare.getFrameBorders() - && *getFrameBorders() == *rCompare.getFrameBorders())) + return getFrameBorders() == rCompare.getFrameBorders() && doForceToSingleDiscreteUnit() == rCompare.doForceToSingleDiscreteUnit(); } |