diff options
author | Thomas Arnhold <thomas@arnhold.org> | 2013-04-03 01:54:49 +0200 |
---|---|---|
committer | Thomas Arnhold <thomas@arnhold.org> | 2013-04-03 02:49:16 +0200 |
commit | f5cf7f36f90f454fd40c5894fbdf5ae070b6b59e (patch) | |
tree | 6a57d98a33159b377f35360a66295a5ad4d4ab87 /drawinglayer | |
parent | fdo#62525: use cow_wrapper for SdrFillAttribute (diff) | |
download | core-f5cf7f36f90f454fd40c5894fbdf5ae070b6b59e.tar.gz core-f5cf7f36f90f454fd40c5894fbdf5ae070b6b59e.zip |
fdo#62525: use cow_wrapper for SdrFillBitmapAttribute
Change-Id: Ib8bb849b179be12680c5adae6bf89afc5ad31563
Diffstat (limited to 'drawinglayer')
-rw-r--r-- | drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx | 6 | ||||
-rw-r--r-- | drawinglayer/source/attribute/sdrfillbitmapattribute.cxx | 92 |
2 files changed, 30 insertions, 68 deletions
diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx index 602455ea075a..78417f3577c9 100644 --- a/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx +++ b/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx @@ -21,6 +21,7 @@ #define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLBITMAPATTRIBUTE_HXX #include <drawinglayer/drawinglayerdllapi.h> +#include <o3tl/cow_wrapper.hxx> ////////////////////////////////////////////////////////////////////////////// // predefines @@ -45,8 +46,11 @@ namespace drawinglayer { class DRAWINGLAYER_DLLPUBLIC SdrFillBitmapAttribute { + public: + typedef o3tl::cow_wrapper< ImpSdrFillBitmapAttribute > ImplType; + private: - ImpSdrFillBitmapAttribute* mpSdrFillBitmapAttribute; + ImplType mpSdrFillBitmapAttribute; public: /// constructors/assignmentoperator/destructor diff --git a/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx b/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx index 5d86525c6d98..b21566f06d81 100644 --- a/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx +++ b/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx @@ -19,6 +19,7 @@ #include <drawinglayer/attribute/sdrfillbitmapattribute.hxx> #include <drawinglayer/attribute/fillbitmapattribute.hxx> +#include <rtl/instance.hxx> #include <vcl/bitmapex.hxx> ////////////////////////////////////////////////////////////////////////////// @@ -30,9 +31,6 @@ namespace drawinglayer class ImpSdrFillBitmapAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // data definitions BitmapEx maBitmapEx; basegfx::B2DVector maSize; @@ -54,8 +52,7 @@ namespace drawinglayer bool bTiling, bool bStretch, bool bLogSize) - : mnRefCount(0), - maBitmapEx(rBitmapEx), + : maBitmapEx(rBitmapEx), maSize(rSize), maOffset(rOffset), maOffsetPosition(rOffsetPosition), @@ -66,6 +63,18 @@ namespace drawinglayer { } + ImpSdrFillBitmapAttribute() + : maBitmapEx(BitmapEx()), + maSize(basegfx::B2DVector()), + maOffset(basegfx::B2DVector()), + maOffsetPosition(basegfx::B2DVector()), + maRectPoint(basegfx::B2DVector()), + mbTiling(false), + mbStretch(false), + mbLogSize(false) + { + } + // data read access const BitmapEx& getBitmapEx() const { return maBitmapEx; } const basegfx::B2DVector& getSize() const { return maSize; } @@ -87,31 +96,14 @@ namespace drawinglayer && getStretch() == rCandidate.getStretch() && getLogSize() == rCandidate.getLogSize()); } - - static ImpSdrFillBitmapAttribute* get_global_default() - { - static ImpSdrFillBitmapAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrFillBitmapAttribute( - BitmapEx(), - basegfx::B2DVector(), - basegfx::B2DVector(), - basegfx::B2DVector(), - basegfx::B2DVector(), - false, - false, - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< SdrFillBitmapAttribute::ImplType, theGlobalDefault > {}; + } + SdrFillBitmapAttribute::SdrFillBitmapAttribute( const BitmapEx& rBitmapEx, const basegfx::B2DVector& rSize, @@ -122,7 +114,7 @@ namespace drawinglayer bool bStretch, bool bLogSize) : mpSdrFillBitmapAttribute( - new ImpSdrFillBitmapAttribute( + ImpSdrFillBitmapAttribute( rBitmapEx, rSize, rOffset, @@ -135,67 +127,33 @@ namespace drawinglayer } SdrFillBitmapAttribute::SdrFillBitmapAttribute() - : mpSdrFillBitmapAttribute(ImpSdrFillBitmapAttribute::get_global_default()) + : mpSdrFillBitmapAttribute(theGlobalDefault::get()) { - mpSdrFillBitmapAttribute->mnRefCount++; } SdrFillBitmapAttribute::SdrFillBitmapAttribute(const SdrFillBitmapAttribute& rCandidate) : mpSdrFillBitmapAttribute(rCandidate.mpSdrFillBitmapAttribute) { - mpSdrFillBitmapAttribute->mnRefCount++; } SdrFillBitmapAttribute::~SdrFillBitmapAttribute() { - if(mpSdrFillBitmapAttribute->mnRefCount) - { - mpSdrFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpSdrFillBitmapAttribute; - } } bool SdrFillBitmapAttribute::isDefault() const { - return mpSdrFillBitmapAttribute == ImpSdrFillBitmapAttribute::get_global_default(); + return mpSdrFillBitmapAttribute.same_object(theGlobalDefault::get()); } SdrFillBitmapAttribute& SdrFillBitmapAttribute::operator=(const SdrFillBitmapAttribute& rCandidate) { - if(rCandidate.mpSdrFillBitmapAttribute != mpSdrFillBitmapAttribute) - { - if(mpSdrFillBitmapAttribute->mnRefCount) - { - mpSdrFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpSdrFillBitmapAttribute; - } - - mpSdrFillBitmapAttribute = rCandidate.mpSdrFillBitmapAttribute; - mpSdrFillBitmapAttribute->mnRefCount++; - } - + mpSdrFillBitmapAttribute = rCandidate.mpSdrFillBitmapAttribute; return *this; } bool SdrFillBitmapAttribute::operator==(const SdrFillBitmapAttribute& rCandidate) const { - if(rCandidate.mpSdrFillBitmapAttribute == mpSdrFillBitmapAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrFillBitmapAttribute == *mpSdrFillBitmapAttribute); + return rCandidate.mpSdrFillBitmapAttribute == mpSdrFillBitmapAttribute; } const BitmapEx& SdrFillBitmapAttribute::getBitmapEx() const |