diff options
author | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2015-05-24 16:12:01 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2015-05-24 21:50:02 +0200 |
commit | 27e1a92d3bddf3c3e8595256e67aff006a402b6a (patch) | |
tree | 0542cb5aad62647b62da36fcd0d5d966fa0c3572 /svx/source/sdr | |
parent | 6a42657fa9afc93c3e4b7afc0c00c0de8e704169 (diff) |
tdf#62525: use cow_wrapper for SdrFormTextOutlineAttribute
Change-Id: I7f75833bfec2cde140ded1dfe60aed2684905b0a
Diffstat (limited to 'svx/source/sdr')
-rw-r--r-- | svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx | 84 |
1 files changed, 23 insertions, 61 deletions
diff --git a/svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx b/svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx index 23a8bf8b44f9..1126013c3a7a 100644 --- a/svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx +++ b/svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx @@ -21,7 +21,7 @@ #include <sdr/attribute/sdrformtextoutlineattribute.hxx> #include <drawinglayer/attribute/lineattribute.hxx> #include <drawinglayer/attribute/strokeattribute.hxx> - +#include <rtl/instance.hxx> namespace drawinglayer @@ -31,9 +31,6 @@ namespace drawinglayer class ImpSdrFormTextOutlineAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // one set of attributes for FormText (FontWork) outline visualisation LineAttribute maLineAttribute; StrokeAttribute maStrokeAttribute; @@ -43,13 +40,19 @@ namespace drawinglayer const LineAttribute& rLineAttribute, const StrokeAttribute& rStrokeAttribute, sal_uInt8 nTransparence) - : mnRefCount(0), - maLineAttribute(rLineAttribute), + : maLineAttribute(rLineAttribute), maStrokeAttribute(rStrokeAttribute), mnTransparence(nTransparence) { } + ImpSdrFormTextOutlineAttribute() + : maLineAttribute(), + maStrokeAttribute(), + mnTransparence(0) + { + } + // data read access const LineAttribute& getLineAttribute() const { return maLineAttribute; } const StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; } @@ -62,97 +65,56 @@ namespace drawinglayer && getStrokeAttribute() == rCandidate.getStrokeAttribute() && getTransparence() == rCandidate.getTransparence()); } - - static ImpSdrFormTextOutlineAttribute* get_global_default() - { - static ImpSdrFormTextOutlineAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrFormTextOutlineAttribute( - LineAttribute(), - StrokeAttribute(), - 0); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< SdrFormTextOutlineAttribute::ImplType, theGlobalDefault > {}; + } + SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute( const LineAttribute& rLineAttribute, const StrokeAttribute& rStrokeAttribute, sal_uInt8 nTransparence) - : mpSdrFormTextOutlineAttribute(new ImpSdrFormTextOutlineAttribute( - rLineAttribute, rStrokeAttribute, nTransparence)) + : mpSdrFormTextOutlineAttribute( + ImpSdrFormTextOutlineAttribute( + rLineAttribute, rStrokeAttribute, nTransparence)) { } SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute() - : mpSdrFormTextOutlineAttribute(ImpSdrFormTextOutlineAttribute::get_global_default()) + : mpSdrFormTextOutlineAttribute(theGlobalDefault::get()) { - mpSdrFormTextOutlineAttribute->mnRefCount++; } SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute(const SdrFormTextOutlineAttribute& rCandidate) : mpSdrFormTextOutlineAttribute(rCandidate.mpSdrFormTextOutlineAttribute) { - mpSdrFormTextOutlineAttribute->mnRefCount++; } SdrFormTextOutlineAttribute::~SdrFormTextOutlineAttribute() { - if(mpSdrFormTextOutlineAttribute->mnRefCount) - { - mpSdrFormTextOutlineAttribute->mnRefCount--; - } - else - { - delete mpSdrFormTextOutlineAttribute; - } } bool SdrFormTextOutlineAttribute::isDefault() const { - return mpSdrFormTextOutlineAttribute == ImpSdrFormTextOutlineAttribute::get_global_default(); + return mpSdrFormTextOutlineAttribute.same_object(theGlobalDefault::get()); } SdrFormTextOutlineAttribute& SdrFormTextOutlineAttribute::operator=(const SdrFormTextOutlineAttribute& rCandidate) { - if(rCandidate.mpSdrFormTextOutlineAttribute != mpSdrFormTextOutlineAttribute) - { - if(mpSdrFormTextOutlineAttribute->mnRefCount) - { - mpSdrFormTextOutlineAttribute->mnRefCount--; - } - else - { - delete mpSdrFormTextOutlineAttribute; - } - - mpSdrFormTextOutlineAttribute = rCandidate.mpSdrFormTextOutlineAttribute; - mpSdrFormTextOutlineAttribute->mnRefCount++; - } - + mpSdrFormTextOutlineAttribute = rCandidate.mpSdrFormTextOutlineAttribute; return *this; } bool SdrFormTextOutlineAttribute::operator==(const SdrFormTextOutlineAttribute& rCandidate) const { - if(rCandidate.mpSdrFormTextOutlineAttribute == mpSdrFormTextOutlineAttribute) - { - return true; - } - + // tdf#87509 default attr is always != non-default attr, even with same values if(rCandidate.isDefault() != isDefault()) - { return false; - } - return (*rCandidate.mpSdrFormTextOutlineAttribute == *mpSdrFormTextOutlineAttribute); + return rCandidate.mpSdrFormTextOutlineAttribute == mpSdrFormTextOutlineAttribute; } const LineAttribute& SdrFormTextOutlineAttribute::getLineAttribute() const |