basegfx/source/polygon/b2dpolygon.cxx | 4 ++-- svgio/inc/svgpathnode.hxx | 7 ++++--- svgio/inc/svgpolynode.hxx | 5 +++-- svgio/source/svgreader/svgpathnode.cxx | 2 +- svgio/source/svgreader/svgpolynode.cxx | 2 +- svgio/source/svgreader/svgtextpathnode.cxx | 4 ++-- svx/source/svdraw/svdotext.cxx | 6 +++--- sw/source/core/text/txtfly.cxx | 7 +++---- 8 files changed, 19 insertions(+), 18 deletions(-)
New commits: commit 3a668a2398fdbe7cfe0176900b26ca6145fb0e8c Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Aug 21 19:57:35 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Aug 22 10:31:24 2021 +0200 no need to use unique_ptr for B2DPolygon it is already a COW type Change-Id: I86c4be9dd83b98eedf169c3b6668a7994204bca0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120827 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/basegfx/source/polygon/b2dpolygon.cxx b/basegfx/source/polygon/b2dpolygon.cxx index 9c8604e6ad32..141982aef10b 100644 --- a/basegfx/source/polygon/b2dpolygon.cxx +++ b/basegfx/source/polygon/b2dpolygon.cxx @@ -461,7 +461,7 @@ class ImplBufferedData : public basegfx::SystemDependentDataHolder { private: // Possibility to hold the last subdivision - std::unique_ptr< basegfx::B2DPolygon > mpDefaultSubdivision; + std::optional< basegfx::B2DPolygon > mpDefaultSubdivision; // Possibility to hold the last B2DRange calculation std::unique_ptr< basegfx::B2DRange > mpB2DRange; @@ -478,7 +478,7 @@ public: { if(!mpDefaultSubdivision) { - const_cast< ImplBufferedData* >(this)->mpDefaultSubdivision.reset(new basegfx::B2DPolygon(basegfx::utils::adaptiveSubdivideByAngle(rSource))); + const_cast< ImplBufferedData* >(this)->mpDefaultSubdivision = basegfx::utils::adaptiveSubdivideByAngle(rSource); } return *mpDefaultSubdivision; diff --git a/svgio/inc/svgpolynode.hxx b/svgio/inc/svgpolynode.hxx index abd14271d543..f5974cd28c08 100644 --- a/svgio/inc/svgpolynode.hxx +++ b/svgio/inc/svgpolynode.hxx @@ -23,6 +23,7 @@ #include "svgstyleattributes.hxx" #include <basegfx/matrix/b2dhommatrix.hxx> #include <basegfx/polygon/b2dpolygon.hxx> +#include <optional> namespace svgio::svgreader { @@ -33,7 +34,7 @@ namespace svgio::svgreader SvgStyleAttributes maSvgStyleAttributes; /// variable scan values, dependent of given XAttributeList - std::unique_ptr<basegfx::B2DPolygon> mpPolygon; + std::optional<basegfx::B2DPolygon> mpPolygon; std::unique_ptr<basegfx::B2DHomMatrix> mpaTransform; bool mbIsPolyline : 1; // true = polyline, false = polygon @@ -50,7 +51,7 @@ namespace svgio::svgreader virtual void decomposeSvgNode(drawinglayer::primitive2d::Primitive2DContainer& rTarget, bool bReferenced) const override; /// Polygon content, set if found in current context - void setPolygon(const basegfx::B2DPolygon* pPolygon) { mpPolygon.reset(); if(pPolygon) mpPolygon.reset(new basegfx::B2DPolygon(*pPolygon)); } + void setPolygon(const std::optional<basegfx::B2DPolygon>& pPolygon) { mpPolygon = pPolygon; } /// transform content, set if found in current context const basegfx::B2DHomMatrix* getTransform() const { return mpaTransform.get(); } diff --git a/svgio/source/svgreader/svgpolynode.cxx b/svgio/source/svgreader/svgpolynode.cxx index d7bcb0f07330..584a94e30d79 100644 --- a/svgio/source/svgreader/svgpolynode.cxx +++ b/svgio/source/svgreader/svgpolynode.cxx @@ -72,7 +72,7 @@ namespace svgio::svgreader aPath.setClosed(true); } - setPolygon(&aPath); + setPolygon(aPath); } } break; commit 523bba89cd5ad6372fb0431cecabdca02ea2b9e3 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Aug 21 19:54:07 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Aug 22 10:31:12 2021 +0200 no need to use unique_ptr for B2DPolyPolygon it is already a COW type Change-Id: Iaf8bf1671781923555df3e43b0db78e87c2c5a87 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120826 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/svgio/inc/svgpathnode.hxx b/svgio/inc/svgpathnode.hxx index 3bb0327db559..59daac852891 100644 --- a/svgio/inc/svgpathnode.hxx +++ b/svgio/inc/svgpathnode.hxx @@ -24,6 +24,7 @@ #include <basegfx/matrix/b2dhommatrix.hxx> #include <basegfx/polygon/b2dpolypolygontools.hxx> #include <basegfx/polygon/b2dpolypolygon.hxx> +#include <optional> namespace svgio::svgreader { @@ -34,7 +35,7 @@ namespace svgio::svgreader SvgStyleAttributes maSvgStyleAttributes; /// variable scan values, dependent of given XAttributeList - std::unique_ptr<basegfx::B2DPolyPolygon> mpPolyPolygon; + std::optional<basegfx::B2DPolyPolygon> mpPolyPolygon; std::unique_ptr<basegfx::B2DHomMatrix> mpaTransform; SvgNumber maPathLength; basegfx::utils::PointIndexSet maHelpPointIndices; @@ -50,8 +51,8 @@ namespace svgio::svgreader virtual void decomposeSvgNode(drawinglayer::primitive2d::Primitive2DContainer& rTarget, bool bReferenced) const override; /// path content, set if found in current context - const basegfx::B2DPolyPolygon* getPath() const { return mpPolyPolygon.get(); } - void setPath(const basegfx::B2DPolyPolygon* pPath) { mpPolyPolygon.reset(); if(pPath) mpPolyPolygon.reset(new basegfx::B2DPolyPolygon(*pPath)); } + const std::optional<basegfx::B2DPolyPolygon>& getPath() const { return mpPolyPolygon; } + void setPath(const std::optional<basegfx::B2DPolyPolygon>& pPath) { mpPolyPolygon = pPath; } /// transform content, set if found in current context const basegfx::B2DHomMatrix* getTransform() const { return mpaTransform.get(); } diff --git a/svgio/source/svgreader/svgpathnode.cxx b/svgio/source/svgreader/svgpathnode.cxx index 773f34f2cf4d..5187df877261 100644 --- a/svgio/source/svgreader/svgpathnode.cxx +++ b/svgio/source/svgreader/svgpathnode.cxx @@ -64,7 +64,7 @@ namespace svgio::svgreader { if(aPath.count()) { - setPath(&aPath); + setPath(aPath); } } break; diff --git a/svgio/source/svgreader/svgtextpathnode.cxx b/svgio/source/svgreader/svgtextpathnode.cxx index 210d674b09ac..e04b8380735e 100644 --- a/svgio/source/svgreader/svgtextpathnode.cxx +++ b/svgio/source/svgreader/svgtextpathnode.cxx @@ -320,7 +320,7 @@ namespace svgio::svgreader return false; } - const basegfx::B2DPolyPolygon* pPolyPolyPath = pSvgPathNode->getPath(); + const std::optional<basegfx::B2DPolyPolygon>& pPolyPolyPath = pSvgPathNode->getPath(); if(!pPolyPolyPath || !pPolyPolyPath->count()) { @@ -352,7 +352,7 @@ namespace svgio::svgreader if(!pSvgPathNode) return; - const basegfx::B2DPolyPolygon* pPolyPolyPath = pSvgPathNode->getPath(); + const std::optional<basegfx::B2DPolyPolygon>& pPolyPolyPath = pSvgPathNode->getPath(); if(!(pPolyPolyPath && pPolyPolyPath->count())) return; diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index eefee015e866..32541331fca0 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -571,7 +571,7 @@ void SdrTextObj::AdaptTextMinSize() void SdrTextObj::ImpSetContourPolygon( SdrOutliner& rOutliner, tools::Rectangle const & rAnchorRect, bool bLineWidth ) const { basegfx::B2DPolyPolygon aXorPolyPolygon(TakeXorPoly()); - std::unique_ptr<basegfx::B2DPolyPolygon> pContourPolyPolygon; + std::optional<basegfx::B2DPolyPolygon> pContourPolyPolygon; basegfx::B2DHomMatrix aMatrix(basegfx::utils::createTranslateB2DHomMatrix( -rAnchorRect.Left(), -rAnchorRect.Top())); @@ -587,7 +587,7 @@ void SdrTextObj::ImpSetContourPolygon( SdrOutliner& rOutliner, tools::Rectangle { // Take line width into account. // When doing the hit test, avoid this. (Performance!) - pContourPolyPolygon.reset(new basegfx::B2DPolyPolygon()); + pContourPolyPolygon.emplace(); // test if shadow needs to be avoided for TakeContour() const SfxItemSet& rSet = GetObjectItemSet(); @@ -622,7 +622,7 @@ void SdrTextObj::ImpSetContourPolygon( SdrOutliner& rOutliner, tools::Rectangle pContourPolyPolygon->transform(aMatrix); } - rOutliner.SetPolygon(aXorPolyPolygon, pContourPolyPolygon.get()); + rOutliner.SetPolygon(aXorPolyPolygon, pContourPolyPolygon ? &*pContourPolyPolygon : nullptr); } void SdrTextObj::TakeUnrotatedSnapRect(tools::Rectangle& rRect) const diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx index 2daaf4ac6d6c..b2799b08acf8 100644 --- a/sw/source/core/text/txtfly.cxx +++ b/sw/source/core/text/txtfly.cxx @@ -216,7 +216,7 @@ SwRect SwContourCache::ContourRect( const SwFormat* pFormat, mvItems.pop_back(); } ::basegfx::B2DPolyPolygon aPolyPolygon; - std::unique_ptr<::basegfx::B2DPolyPolygon> pPolyPolygon; + std::optional<::basegfx::B2DPolyPolygon> pPolyPolygon; if ( auto pVirtFlyDrawObj = dynamic_cast< const SwVirtFlyDrawObj *>( pObj ) ) { @@ -236,14 +236,13 @@ SwRect SwContourCache::ContourRect( const SwFormat* pFormat, aPolyPolygon = pObj->TakeXorPoly(); } - ::basegfx::B2DPolyPolygon aContourPoly(pObj->TakeContour()); - pPolyPolygon.reset(new ::basegfx::B2DPolyPolygon(aContourPoly)); + pPolyPolygon = pObj->TakeContour(); } const SvxLRSpaceItem &rLRSpace = pFormat->GetLRSpace(); const SvxULSpaceItem &rULSpace = pFormat->GetULSpace(); CacheItem item { pObj, // due to #37347 the Object must be entered only after GetContour() - std::make_unique<TextRanger>( aPolyPolygon, pPolyPolygon.get(), 20, + std::make_unique<TextRanger>( aPolyPolygon, pPolyPolygon ? &*pPolyPolygon : nullptr, 20, o3tl::narrowing<sal_uInt16>(rLRSpace.GetLeft()), o3tl::narrowing<sal_uInt16>(rLRSpace.GetRight()), pFormat->GetSurround().IsOutside(), false, pFrame->IsVertical() ) };