summaryrefslogtreecommitdiff
path: root/drawinglayer
diff options
context:
space:
mode:
authorThomas Arnhold <thomas@arnhold.org>2013-03-23 06:15:47 +0100
committerThorsten Behrens <tbehrens@suse.com>2013-03-23 20:22:31 +0000
commitcafc879f8978ea9f7fca1be9f6aa5057f0a59617 (patch)
tree104b318b6b9a5410442dfac1853477c7c03cf5eb /drawinglayer
parent4eda900b8391c691445ab460ffad196132bc394e (diff)
fdo#62525: use cow_wrapper for FillBitmapAttribute
Change-Id: I0f666d4baaf6dc4e9f7ea30a518a8904f01d749f Reviewed-on: https://gerrit.libreoffice.org/2948 Reviewed-by: Thorsten Behrens <tbehrens@suse.com> Tested-by: Thorsten Behrens <tbehrens@suse.com>
Diffstat (limited to 'drawinglayer')
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx6
-rw-r--r--drawinglayer/source/attribute/fillbitmapattribute.cxx80
2 files changed, 24 insertions, 62 deletions
diff --git a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx
index ced46b3e4078..851dc5ed0697 100644
--- a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx
+++ b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLBITMAPATTRIBUTE_HXX
#include <drawinglayer/drawinglayerdllapi.h>
+#include <o3tl/cow_wrapper.hxx>
//////////////////////////////////////////////////////////////////////////////
// predefines
@@ -44,8 +45,11 @@ namespace drawinglayer
{
class DRAWINGLAYER_DLLPUBLIC FillBitmapAttribute
{
+ public:
+ typedef o3tl::cow_wrapper< ImpFillBitmapAttribute > ImplType;
+
private:
- ImpFillBitmapAttribute* mpFillBitmapAttribute;
+ ImplType mpFillBitmapAttribute;
public:
/// constructors/assignmentoperator/destructor
diff --git a/drawinglayer/source/attribute/fillbitmapattribute.cxx b/drawinglayer/source/attribute/fillbitmapattribute.cxx
index b3151785f75f..e2bedb47d7e3 100644
--- a/drawinglayer/source/attribute/fillbitmapattribute.cxx
+++ b/drawinglayer/source/attribute/fillbitmapattribute.cxx
@@ -29,9 +29,6 @@ namespace drawinglayer
class ImpFillBitmapAttribute
{
public:
- // refcounter
- sal_uInt32 mnRefCount;
-
// data definitions
BitmapEx maBitmapEx;
basegfx::B2DPoint maTopLeft;
@@ -45,14 +42,21 @@ namespace drawinglayer
const basegfx::B2DPoint& rTopLeft,
const basegfx::B2DVector& rSize,
bool bTiling)
- : mnRefCount(0),
- maBitmapEx(rBitmapEx),
+ : maBitmapEx(rBitmapEx),
maTopLeft(rTopLeft),
maSize(rSize),
mbTiling(bTiling)
{
}
+ ImpFillBitmapAttribute()
+ : maBitmapEx(BitmapEx()),
+ maTopLeft(basegfx::B2DPoint()),
+ maSize(basegfx::B2DVector()),
+ mbTiling(false)
+ {
+ }
+
bool operator==(const ImpFillBitmapAttribute& rCandidate) const
{
return (maBitmapEx == rCandidate.maBitmapEx
@@ -66,33 +70,20 @@ namespace drawinglayer
const basegfx::B2DPoint& getTopLeft() const { return maTopLeft; }
const basegfx::B2DVector& getSize() const { return maSize; }
bool getTiling() const { return mbTiling; }
-
- static ImpFillBitmapAttribute* get_global_default()
- {
- static ImpFillBitmapAttribute* pDefault = 0;
-
- if(!pDefault)
- {
- pDefault = new ImpFillBitmapAttribute(
- BitmapEx(),
- basegfx::B2DPoint(),
- basegfx::B2DVector(),
- false);
-
- // never delete; start with RefCount 1, not 0
- pDefault->mnRefCount++;
- }
-
- return pDefault;
- }
};
+ namespace
+ {
+ struct theGlobalDefault :
+ public rtl::Static< FillBitmapAttribute::ImplType, theGlobalDefault > {};
+ }
+
FillBitmapAttribute::FillBitmapAttribute(
const BitmapEx& rBitmapEx,
const basegfx::B2DPoint& rTopLeft,
const basegfx::B2DVector& rSize,
bool bTiling)
- : mpFillBitmapAttribute(new ImpFillBitmapAttribute(
+ : mpFillBitmapAttribute(ImpFillBitmapAttribute(
rBitmapEx, rTopLeft, rSize, bTiling))
{
}
@@ -100,59 +91,26 @@ namespace drawinglayer
FillBitmapAttribute::FillBitmapAttribute(const FillBitmapAttribute& rCandidate)
: mpFillBitmapAttribute(rCandidate.mpFillBitmapAttribute)
{
- mpFillBitmapAttribute->mnRefCount++;
}
FillBitmapAttribute::~FillBitmapAttribute()
{
- if(mpFillBitmapAttribute->mnRefCount)
- {
- mpFillBitmapAttribute->mnRefCount--;
- }
- else
- {
- delete mpFillBitmapAttribute;
- }
}
bool FillBitmapAttribute::isDefault() const
{
- return mpFillBitmapAttribute == ImpFillBitmapAttribute::get_global_default();
+ return mpFillBitmapAttribute.same_object(theGlobalDefault::get());
}
FillBitmapAttribute& FillBitmapAttribute::operator=(const FillBitmapAttribute& rCandidate)
{
- if(rCandidate.mpFillBitmapAttribute != mpFillBitmapAttribute)
- {
- if(mpFillBitmapAttribute->mnRefCount)
- {
- mpFillBitmapAttribute->mnRefCount--;
- }
- else
- {
- delete mpFillBitmapAttribute;
- }
-
- mpFillBitmapAttribute = rCandidate.mpFillBitmapAttribute;
- mpFillBitmapAttribute->mnRefCount++;
- }
-
+ mpFillBitmapAttribute = rCandidate.mpFillBitmapAttribute;
return *this;
}
bool FillBitmapAttribute::operator==(const FillBitmapAttribute& rCandidate) const
{
- if(rCandidate.mpFillBitmapAttribute == mpFillBitmapAttribute)
- {
- return true;
- }
-
- if(rCandidate.isDefault() != isDefault())
- {
- return false;
- }
-
- return (*rCandidate.mpFillBitmapAttribute == *mpFillBitmapAttribute);
+ return rCandidate.mpFillBitmapAttribute == mpFillBitmapAttribute;
}
const BitmapEx& FillBitmapAttribute::getBitmapEx() const