summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorsten Behrens <Thorsten.Behrens@CIB.de>2015-05-24 16:12:01 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2015-05-24 21:50:02 +0200
commit27e1a92d3bddf3c3e8595256e67aff006a402b6a (patch)
tree0542cb5aad62647b62da36fcd0d5d966fa0c3572
parent6a42657fa9afc93c3e4b7afc0c00c0de8e704169 (diff)
tdf#62525: use cow_wrapper for SdrFormTextOutlineAttribute
Change-Id: I7f75833bfec2cde140ded1dfe60aed2684905b0a
-rw-r--r--svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx7
-rw-r--r--svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx84
2 files changed, 28 insertions, 63 deletions
diff --git a/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx b/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx
index 979762c2b25e..121f45b91f00 100644
--- a/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx
+++ b/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx
@@ -21,7 +21,7 @@
#define INCLUDED_SVX_INC_SDR_ATTRIBUTE_SDRFORMTEXTOUTLINEATTRIBUTE_HXX
#include <sal/types.h>
-
+#include <o3tl/cow_wrapper.hxx>
// predefines
@@ -39,8 +39,11 @@ namespace drawinglayer
{
class SdrFormTextOutlineAttribute
{
+ public:
+ typedef o3tl::cow_wrapper< ImpSdrFormTextOutlineAttribute > ImplType;
+
private:
- ImpSdrFormTextOutlineAttribute* mpSdrFormTextOutlineAttribute;
+ ImplType mpSdrFormTextOutlineAttribute;
public:
/// constructors/assignmentoperator/destructor
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