summaryrefslogtreecommitdiff
path: root/drawinglayer
diff options
context:
space:
mode:
authorThomas Arnhold <thomas@arnhold.org>2013-04-03 01:54:49 +0200
committerThomas Arnhold <thomas@arnhold.org>2013-04-03 02:49:16 +0200
commitf5cf7f36f90f454fd40c5894fbdf5ae070b6b59e (patch)
tree6a57d98a33159b377f35360a66295a5ad4d4ab87 /drawinglayer
parentf98bee58fbf1e4862477fb6aa014447746f1ef9d (diff)
fdo#62525: use cow_wrapper for SdrFillBitmapAttribute
Change-Id: Ib8bb849b179be12680c5adae6bf89afc5ad31563
Diffstat (limited to 'drawinglayer')
-rw-r--r--drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx6
-rw-r--r--drawinglayer/source/attribute/sdrfillbitmapattribute.cxx92
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