Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2954
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/54/2954/1
fdo#62525: use cow_wrapper for FillGradientAttribute
a xmlsecurity/workben/signaturetest.cxx.wo
Change-Id: I13aa9817d7abd3753579f6825c166191a836eef3
---
M drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx
M drawinglayer/source/attribute/fillgradientattribute.cxx
2 files changed, 30 insertions(+), 65 deletions(-)
diff --git a/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx
b/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx
index 6d01c86..e791193 100644
--- a/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx
+++ b/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLGRADIENTATTRIBUTE_HXX
#include <drawinglayer/drawinglayerdllapi.h>
+#include <o3tl/cow_wrapper.hxx>
//////////////////////////////////////////////////////////////////////////////
// predefines
@@ -58,8 +59,11 @@
{
class DRAWINGLAYER_DLLPUBLIC FillGradientAttribute
{
+ public:
+ typedef o3tl::cow_wrapper< ImpFillGradientAttribute > ImplType;
+
private:
- ImpFillGradientAttribute* mpFillGradientAttribute;
+ ImplType mpFillGradientAttribute;
public:
/// constructors/assignmentoperator/destructor
diff --git a/drawinglayer/source/attribute/fillgradientattribute.cxx
b/drawinglayer/source/attribute/fillgradientattribute.cxx
index 987082c..6664791 100644
--- a/drawinglayer/source/attribute/fillgradientattribute.cxx
+++ b/drawinglayer/source/attribute/fillgradientattribute.cxx
@@ -19,6 +19,7 @@
#include <drawinglayer/attribute/fillgradientattribute.hxx>
#include <basegfx/color/bcolor.hxx>
+#include <rtl/instance.hxx>
//////////////////////////////////////////////////////////////////////////////
@@ -29,9 +30,6 @@
class ImpFillGradientAttribute
{
public:
- // refcounter
- sal_uInt32 mnRefCount;
-
// data definitions
GradientStyle meStyle;
double mfBorder;
@@ -51,8 +49,7 @@
const basegfx::BColor& rStartColor,
const basegfx::BColor& rEndColor,
sal_uInt16 nSteps)
- : mnRefCount(0),
- meStyle(eStyle),
+ : meStyle(eStyle),
mfBorder(fBorder),
mfOffsetX(fOffsetX),
mfOffsetY(fOffsetY),
@@ -60,6 +57,18 @@
maStartColor(rStartColor),
maEndColor(rEndColor),
mnSteps(nSteps)
+ {
+ }
+
+ ImpFillGradientAttribute()
+ : meStyle(GRADIENTSTYLE_LINEAR),
+ mfBorder(0.0),
+ mfOffsetX(0.0),
+ mfOffsetY(0.0),
+ mfAngle(0.0),
+ maStartColor(basegfx::BColor()),
+ maEndColor(basegfx::BColor()),
+ mnSteps(0)
{
}
@@ -84,27 +93,13 @@
&& getEndColor() == rCandidate.getEndColor()
&& getSteps() == rCandidate.getSteps());
}
-
- static ImpFillGradientAttribute* get_global_default()
- {
- static ImpFillGradientAttribute* pDefault = 0;
-
- if(!pDefault)
- {
- pDefault = new ImpFillGradientAttribute(
- GRADIENTSTYLE_LINEAR,
- 0.0, 0.0, 0.0, 0.0,
- basegfx::BColor(),
- basegfx::BColor(),
- 0);
-
- // never delete; start with RefCount 1, not 0
- pDefault->mnRefCount++;
- }
-
- return pDefault;
- }
};
+
+ namespace
+ {
+ struct theGlobalDefault :
+ public rtl::Static< FillGradientAttribute::ImplType, theGlobalDefault > {};
+ }
FillGradientAttribute::FillGradientAttribute(
GradientStyle eStyle,
@@ -115,73 +110,39 @@
const basegfx::BColor& rStartColor,
const basegfx::BColor& rEndColor,
sal_uInt16 nSteps)
- : mpFillGradientAttribute(new ImpFillGradientAttribute(
+ : mpFillGradientAttribute(ImpFillGradientAttribute(
eStyle, fBorder, fOffsetX, fOffsetY, fAngle, rStartColor, rEndColor, nSteps))
{
}
FillGradientAttribute::FillGradientAttribute()
- : mpFillGradientAttribute(ImpFillGradientAttribute::get_global_default())
+ : mpFillGradientAttribute(theGlobalDefault::get())
{
- mpFillGradientAttribute->mnRefCount++;
}
FillGradientAttribute::FillGradientAttribute(const FillGradientAttribute& rCandidate)
: mpFillGradientAttribute(rCandidate.mpFillGradientAttribute)
{
- mpFillGradientAttribute->mnRefCount++;
}
FillGradientAttribute::~FillGradientAttribute()
{
- if(mpFillGradientAttribute->mnRefCount)
- {
- mpFillGradientAttribute->mnRefCount--;
- }
- else
- {
- delete mpFillGradientAttribute;
- }
}
bool FillGradientAttribute::isDefault() const
{
- return mpFillGradientAttribute == ImpFillGradientAttribute::get_global_default();
+ return mpFillGradientAttribute.same_object(theGlobalDefault::get());
}
FillGradientAttribute& FillGradientAttribute::operator=(const FillGradientAttribute&
rCandidate)
{
- if(rCandidate.mpFillGradientAttribute != mpFillGradientAttribute)
- {
- if(mpFillGradientAttribute->mnRefCount)
- {
- mpFillGradientAttribute->mnRefCount--;
- }
- else
- {
- delete mpFillGradientAttribute;
- }
-
- mpFillGradientAttribute = rCandidate.mpFillGradientAttribute;
- mpFillGradientAttribute->mnRefCount++;
- }
-
+ mpFillGradientAttribute = rCandidate.mpFillGradientAttribute;
return *this;
}
bool FillGradientAttribute::operator==(const FillGradientAttribute& rCandidate) const
{
- if(rCandidate.mpFillGradientAttribute == mpFillGradientAttribute)
- {
- return true;
- }
-
- if(rCandidate.isDefault() != isDefault())
- {
- return false;
- }
-
- return (*rCandidate.mpFillGradientAttribute == *mpFillGradientAttribute);
+ return rCandidate.mpFillGradientAttribute == mpFillGradientAttribute;
}
const basegfx::BColor& FillGradientAttribute::getStartColor() const
--
To view, visit https://gerrit.libreoffice.org/2954
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I13aa9817d7abd3753579f6825c166191a836eef3
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Thomas Arnhold <thomas@arnhold.org>
Context
- [PATCH] fdo#62525: use cow_wrapper for FillGradientAttribute · Thomas Arnhold (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.