diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/region.cxx | 76 |
1 files changed, 34 insertions, 42 deletions
diff --git a/vcl/source/gdi/region.cxx b/vcl/source/gdi/region.cxx index e9f5c424f643..51fe138c695c 100644 --- a/vcl/source/gdi/region.cxx +++ b/vcl/source/gdi/region.cxx @@ -33,6 +33,7 @@ #include <basegfx/range/b2drange.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> #include <tools/poly.hxx> +#include <o3tl/make_unique.hxx> namespace { @@ -84,12 +85,12 @@ namespace A new RegionBand object is returned that contains the bands that represent the given poly-polygon. */ - RegionBand* ImplRectilinearPolygonToBands(const tools::PolyPolygon& rPolyPoly) + std::unique_ptr<RegionBand> ImplRectilinearPolygonToBands(const tools::PolyPolygon& rPolyPoly) { OSL_ASSERT(ImplIsPolygonRectilinear (rPolyPoly)); // Create a new RegionBand object as container of the bands. - RegionBand* pRegionBand = new RegionBand(); + std::unique_ptr<RegionBand> pRegionBand( o3tl::make_unique<RegionBand>() ); long nLineId = 0; // Iterate over all polygons. @@ -182,12 +183,12 @@ namespace /** Convert a general polygon (one for which ImplIsPolygonRectilinear() returns <FALSE/>) to bands. */ - RegionBand* ImplGeneralPolygonToBands(const tools::PolyPolygon& rPolyPoly, const Rectangle& rPolygonBoundingBox) + std::unique_ptr<RegionBand> ImplGeneralPolygonToBands(const tools::PolyPolygon& rPolyPoly, const Rectangle& rPolygonBoundingBox) { long nLineID = 0; // initialisation and creation of Bands - RegionBand* pRegionBand = new RegionBand(); + std::unique_ptr<RegionBand> pRegionBand( o3tl::make_unique<RegionBand>() ); pRegionBand->CreateBandRange(rPolygonBoundingBox.Top(), rPolygonBoundingBox.Bottom()); // insert polygons @@ -231,9 +232,9 @@ bool vcl::Region::IsEmpty() const } -RegionBand* ImplCreateRegionBandFromPolyPolygon(const tools::PolyPolygon& rPolyPolygon) +std::unique_ptr<RegionBand> ImplCreateRegionBandFromPolyPolygon(const tools::PolyPolygon& rPolyPolygon) { - RegionBand* pRetval = nullptr; + std::unique_ptr<RegionBand> pRetval; if(rPolyPolygon.Count()) { @@ -268,8 +269,7 @@ RegionBand* ImplCreateRegionBandFromPolyPolygon(const tools::PolyPolygon& rPolyP // of seps are joined. if(!pRetval->OptimizeBandList()) { - delete pRetval; - pRetval = nullptr; + pRetval.reset(); } } } @@ -571,7 +571,7 @@ bool vcl::Region::Union( const Rectangle& rRect ) return true; } - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // get justified rectangle const long nLeft(std::min(rRect.Left(), rRect.Right())); @@ -588,11 +588,10 @@ bool vcl::Region::Union( const Rectangle& rRect ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -664,7 +663,7 @@ bool vcl::Region::Intersect( const Rectangle& rRect ) return true; } - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // get justified rectangle const long nLeft(std::min(rRect.Left(), rRect.Right())); @@ -681,11 +680,10 @@ bool vcl::Region::Intersect( const Rectangle& rRect ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -745,7 +743,7 @@ bool vcl::Region::Exclude( const Rectangle& rRect ) return true; } - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // get justified rectangle const long nLeft(std::min(rRect.Left(), rRect.Right())); @@ -762,11 +760,10 @@ bool vcl::Region::Exclude( const Rectangle& rRect ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -830,7 +827,7 @@ bool vcl::Region::XOr( const Rectangle& rRect ) } // only region band mode possibility left here or null/empty - RegionBand* pNew = new RegionBand(*getRegionBand()); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*getRegionBand())); // get justified rectangle const long nLeft(std::min(rRect.Left(), rRect.Right())); @@ -847,11 +844,10 @@ bool vcl::Region::XOr( const Rectangle& rRect ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -927,7 +923,7 @@ bool vcl::Region::Union( const vcl::Region& rRegion ) } // prepare source and target - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // union with source pNew->Union(*pSource); @@ -935,11 +931,10 @@ bool vcl::Region::Union( const vcl::Region& rRegion ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -1047,7 +1042,7 @@ bool vcl::Region::Intersect( const vcl::Region& rRegion ) else { // prepare new regionBand - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // intersect with source pNew->Intersect(*pSource); @@ -1055,11 +1050,10 @@ bool vcl::Region::Intersect( const vcl::Region& rRegion ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); } return true; @@ -1134,7 +1128,7 @@ bool vcl::Region::Exclude( const vcl::Region& rRegion ) } // prepare source and target - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // union with source const bool bSuccess(pNew->Exclude(*pSource)); @@ -1142,11 +1136,10 @@ bool vcl::Region::Exclude( const vcl::Region& rRegion ) // cleanup if(!bSuccess) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -1223,7 +1216,7 @@ bool vcl::Region::XOr( const vcl::Region& rRegion ) } // prepare source and target - RegionBand* pNew = new RegionBand(*pCurrent); + std::unique_ptr<RegionBand> pNew( o3tl::make_unique<RegionBand>(*pCurrent)); // union with source pNew->XOr(*pSource); @@ -1231,11 +1224,10 @@ bool vcl::Region::XOr( const vcl::Region& rRegion ) // cleanup if(!pNew->OptimizeBandList()) { - delete pNew; - pNew = nullptr; + pNew.reset(); } - mpRegionBand.reset(pNew); + mpRegionBand = std::move(pNew); return true; } @@ -1350,12 +1342,12 @@ const RegionBand* vcl::Region::GetAsRegionBand() const if(getB2DPolyPolygon()) { // convert B2DPolyPolygon to RegionBand, buffer it and return it - const_cast< vcl::Region* >(this)->mpRegionBand.reset(ImplCreateRegionBandFromPolyPolygon(tools::PolyPolygon(*getB2DPolyPolygon()))); + const_cast< vcl::Region* >(this)->mpRegionBand = ImplCreateRegionBandFromPolyPolygon(tools::PolyPolygon(*getB2DPolyPolygon())); } else if(getPolyPolygon()) { // convert B2DPolyPolygon to RegionBand, buffer it and return it - const_cast< vcl::Region* >(this)->mpRegionBand.reset(ImplCreateRegionBandFromPolyPolygon(*getPolyPolygon())); + const_cast< vcl::Region* >(this)->mpRegionBand = ImplCreateRegionBandFromPolyPolygon(*getPolyPolygon()); } } |