basegfx/source/polygon/b2dtrapezoid.cxx | 4 drawinglayer/source/attribute/fillgradientattribute.cxx | 4 drawinglayer/source/attribute/fillgraphicattribute.cxx | 4 drawinglayer/source/attribute/fillhatchattribute.cxx | 4 drawinglayer/source/attribute/lineattribute.cxx | 4 drawinglayer/source/attribute/linestartendattribute.cxx | 4 drawinglayer/source/attribute/sdrfillattribute.cxx | 4 drawinglayer/source/attribute/sdrfillgraphicattribute.cxx | 6 drawinglayer/source/attribute/sdrlightingattribute3d.cxx | 4 drawinglayer/source/attribute/sdrlineattribute.cxx | 4 drawinglayer/source/attribute/sdrlinestartendattribute.cxx | 4 drawinglayer/source/attribute/sdrsceneattribute3d.cxx | 4 drawinglayer/source/attribute/sdrshadowattribute.cxx | 4 drawinglayer/source/attribute/strokeattribute.cxx | 4 drawinglayer/source/primitive2d/cropprimitive2d.cxx | 2 drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx | 2 drawinglayer/source/primitive2d/metafileprimitive2d.cxx | 4 include/basegfx/curve/b2dcubicbezier.hxx | 2 include/basegfx/polygon/b2dpolygontools.hxx | 2 include/basegfx/polygon/b2dpolypolygoncutter.hxx | 4 include/basegfx/polygon/b2dpolypolygontools.hxx | 4 include/drawinglayer/primitive2d/polygonprimitive2d.hxx | 6 include/drawinglayer/processor2d/baseprocessor2d.hxx | 2 include/svx/e3dsceneupdater.hxx | 22 +- include/svx/sdr/attribute/sdrformtextattribute.hxx | 7 include/svx/sdr/attribute/sdrtextattribute.hxx | 7 svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx | 7 svx/source/sdr/attribute/sdrformtextattribute.cxx | 73 +------- svx/source/sdr/attribute/sdrformtextoutlineattribute.cxx | 84 ++------- svx/source/sdr/attribute/sdrtextattribute.cxx | 91 ++-------- 30 files changed, 155 insertions(+), 222 deletions(-)
New commits: commit cd6ee5de8ef7345ba219f0d50e9e1ee45332e55f Author: Thorsten Behrens <[email protected]> Date: Sun May 24 21:45:10 2015 +0200 comments: fix mis-use of eventual in English The adjective was used as the German meaning, which translates to maybe or possibly. Change-Id: Iaf5b38f628b23796829a1c4bd3919d4e13b874f0 diff --git a/basegfx/source/polygon/b2dtrapezoid.cxx b/basegfx/source/polygon/b2dtrapezoid.cxx index d7168b7..935287e 100644 --- a/basegfx/source/polygon/b2dtrapezoid.cxx +++ b/basegfx/source/polygon/b2dtrapezoid.cxx @@ -763,7 +763,7 @@ namespace basegfx aAllRange.expand(aRightRange); // prepare loop iterator; aCurrent needs to stay unchanged for - // eventual sorted insertions of new EdgeNodes. Also prepare stop flag + // possibly sorted insertions of new EdgeNodes. Also prepare stop flag TrDeEdgeEntries::iterator aLoop(aCurrent); bool bDone(false); @@ -848,7 +848,7 @@ namespace basegfx } // when we get here, the intended trapezoid can be used. It needs to - // be corrected, eventually (if prepared); but this is no reason not to + // be corrected possibly (if prepared); but this is no reason not to // use it in the same loop iteration if(!bEndOnSameLine) { diff --git a/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx b/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx index ea7e691..6efece2 100644 --- a/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx +++ b/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx @@ -210,7 +210,7 @@ namespace drawinglayer FillGraphicAttribute SdrFillGraphicAttribute::createFillGraphicAttribute(const basegfx::B2DRange& rRange) const { - // get logical size of bitmap (before expanding eventually) + // get logical size of bitmap (before possibly expanding it) Graphic aGraphic(getFillGraphic()); // init values with defaults for stretched diff --git a/drawinglayer/source/primitive2d/cropprimitive2d.cxx b/drawinglayer/source/primitive2d/cropprimitive2d.cxx index 8c5f1d6..b2a7ea4 100644 --- a/drawinglayer/source/primitive2d/cropprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/cropprimitive2d.cxx @@ -116,7 +116,7 @@ namespace drawinglayer // apply original transformation. Since we have manipulated the crop // in unit coordinates we do not need to care about mirroring or - // a corrected point for eventual shear or rotation, this all comes for + // a corrected point for a possible shear or rotation, this all comes for // free aNewTransform = getTransformation() * aNewTransform; diff --git a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx index dbf8674..e406a3b 100644 --- a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx @@ -49,7 +49,7 @@ namespace drawinglayer const basegfx::B2DPoint aWorldTopLeft(getObjectTransformation() * getTopLeft()); // build object matrix in world coordinates so that the top-left - // position remains, but eventual transformations (e.g. rotations) + // position remains, but possible transformations (e.g. rotations) // in the ObjectToView stack remain and get correctly applied basegfx::B2DHomMatrix aObjectTransform; diff --git a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx index 100d2f3..e718176 100644 --- a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx @@ -943,8 +943,8 @@ namespace /** helper to take needed action on ClipRegion change. This method needs to be called on any vcl::Region change, e.g. at the obvious actions doing this, but also at pop-calls which change the vcl::Region of the current context. It takes care of creating the - current embeddec context, set the new vcl::Region at the context and eventually prepare - a new target for embracing new geometry to the current region + current embedded context, set the new vcl::Region at the context and possibly prepare + a new target for including new geometry into the current region */ void HandleNewClipRegion( const basegfx::B2DPolyPolygon& rClipPolyPolygon, diff --git a/include/basegfx/curve/b2dcubicbezier.hxx b/include/basegfx/curve/b2dcubicbezier.hxx index bde5318..72715ed 100644 --- a/include/basegfx/curve/b2dcubicbezier.hxx +++ b/include/basegfx/curve/b2dcubicbezier.hxx @@ -166,7 +166,7 @@ namespace basegfx /** Get the minimum extremum position t @param rfResult - Will be changed and set to a eventually found split value which should be in the + Will be changed and might possibly be set to a found split value, which should be in the range [0.0 .. 1.0]. It will be the smallest current extremum; there may be more @return diff --git a/include/basegfx/polygon/b2dpolygontools.hxx b/include/basegfx/polygon/b2dpolygontools.hxx index dc0cf11..02cc43d 100644 --- a/include/basegfx/polygon/b2dpolygontools.hxx +++ b/include/basegfx/polygon/b2dpolygontools.hxx @@ -94,7 +94,7 @@ namespace basegfx For detailed discussion see B2DPolygon::getB2DRange() @param rCandidate - The B2DPolygon eventually containing bezier segments + The B2DPolygon possibly containing bezier segments @return The outer range of the bezier curve diff --git a/include/basegfx/polygon/b2dpolypolygoncutter.hxx b/include/basegfx/polygon/b2dpolypolygoncutter.hxx index cfa2449..37ce2ab 100644 --- a/include/basegfx/polygon/b2dpolypolygoncutter.hxx +++ b/include/basegfx/polygon/b2dpolypolygoncutter.hxx @@ -50,8 +50,8 @@ namespace basegfx Same as above, but for single polygons. Result will be free of self-intersections. When result contains multiple polygons, it may be necessary to rearrange their - orientations since holes may have been created (use - correctOrientations eventually). + orientations since holes may have been created (possibly use + correctOrientations). */ BASEGFX_DLLPUBLIC B2DPolyPolygon solveCrossovers(const B2DPolygon& rCandidate); diff --git a/include/basegfx/polygon/b2dpolypolygontools.hxx b/include/basegfx/polygon/b2dpolypolygontools.hxx index 11fed47..42fda3e 100644 --- a/include/basegfx/polygon/b2dpolypolygontools.hxx +++ b/include/basegfx/polygon/b2dpolypolygontools.hxx @@ -74,7 +74,7 @@ namespace basegfx This method just expands by the range of every sub-Polygon. @param rCandidate - The B2DPolyPolygon eventually containing bezier segments + The B2DPolyPolygon possibly containing bezier segments @return The outer range of the polygon @@ -170,7 +170,7 @@ namespace basegfx // This method will correct a pair of polyPolygons where the goal is to keep same point count // to allow direct point association and also to remove self-intersections produced by shrinks. - // This method will eventually change both polyPolygons to reach that goal because there are cases + // This method might possibly change both polyPolygons to reach that goal because there are cases // where it is necessary to add new cut points to the original BASEGFX_DLLPUBLIC void correctGrowShrinkPolygonPair(B2DPolyPolygon& rOriginal, B2DPolyPolygon& rGrown); diff --git a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx index 62e2f20..cc08349 100644 --- a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx @@ -263,9 +263,9 @@ namespace drawinglayer { /** PolygonStrokeArrowPrimitive2D class - This primitive defines a PolygonStrokePrimitive2D which is extended - eventually by start and end definitions which are normally used for - arrows. + This primitive defines a PolygonStrokePrimitive2D, + possibly extended by start and end definitions, which are + normally used for arrows. */ class DRAWINGLAYER_DLLPUBLIC PolygonStrokeArrowPrimitive2D : public PolygonStrokePrimitive2D { diff --git a/include/drawinglayer/processor2d/baseprocessor2d.hxx b/include/drawinglayer/processor2d/baseprocessor2d.hxx index 4f9eedf..95803af 100644 --- a/include/drawinglayer/processor2d/baseprocessor2d.hxx +++ b/include/drawinglayer/processor2d/baseprocessor2d.hxx @@ -69,7 +69,7 @@ namespace drawinglayer Basic Primitives: - - BitmapPrimitive2D (bitmap data, eventually with transparency) + - BitmapPrimitive2D (bitmap data, possibly with transparency) - PointArrayPrimitive2D (single points) - PolygonHairlinePrimitive2D (hairline curves/polygons) - PolyPolygonColorPrimitive2D (colored polygons) diff --git a/include/svx/e3dsceneupdater.hxx b/include/svx/e3dsceneupdater.hxx index 457948c..32041c8 100644 --- a/include/svx/e3dsceneupdater.hxx +++ b/include/svx/e3dsceneupdater.hxx @@ -29,16 +29,20 @@ namespace drawinglayer { namespace geometry { class ViewInformation3D; }} -// This class is a helper to encapsulate 3D object changes which shall change the -// scene's 2D geometry. E.g. when moving one 3D object in a scene, the visualisation -// would not change since the scene's 2D attributes are defined by it's 2D object -// transformation and the changed content would be projected to the same 2D bounds -// as before. To reflect the fact that the 2D positions may 'change' for the user's -// imagination, it is necessary to calculate a new 2D object transformation of the scene -// (the SnapRect) using the old 3D transformation stack and the eventually changed -// 3D content and tu use it. This is only wanted if changes to the scene's -// content are intended to change the scene's 2D geometry attributes +/** Helper for 3d object changes affecting 2d geometry + This class is a helper to encapsulate 3D object changes which shall + change the scene's 2D geometry. E.g. when moving one 3D object in a + scene, the visualisation would not change since the scene's 2D + attributes are defined by it's 2D object transformation and the + changed content would be projected to the same 2D bounds as + before. To reflect the fact that the 2D positions may 'change' for + the user's imagination, it is necessary to calculate a new 2D + object transformation of the scene (the SnapRect) using the old 3D + transformation stack and the possibly modified 3D content and to + use it. This is only desirable if changes to the scene's content + are intended to change the scene's 2D geometry attributes +*/ class SVX_DLLPUBLIC E3DModifySceneSnapRectUpdater { // the scene which may be changed. This gets set to the outmost scene commit e9bb2e6f09d711833e659db3b229326d5e997266 Author: Thorsten Behrens <[email protected]> Date: Sun May 24 17:21:47 2015 +0200 tdf#62525: use cow_wrapper for SdrTextAttribute Change-Id: I8daf6d155c631cbdb850a6af95c92a578905d6e6 diff --git a/include/svx/sdr/attribute/sdrtextattribute.hxx b/include/svx/sdr/attribute/sdrtextattribute.hxx index 637b769..66e3e7a 100644 --- a/include/svx/sdr/attribute/sdrtextattribute.hxx +++ b/include/svx/sdr/attribute/sdrtextattribute.hxx @@ -24,7 +24,7 @@ #include <svx/xenum.hxx> #include <editeng/outlobj.hxx> #include <svx/sdtaitm.hxx> - +#include <o3tl/cow_wrapper.hxx> // predefines @@ -50,8 +50,11 @@ namespace drawinglayer { class SdrTextAttribute { + public: + typedef o3tl::cow_wrapper< ImpSdrTextAttribute > ImplType; + private: - ImpSdrTextAttribute* mpSdrTextAttribute; + ImplType mpSdrTextAttribute; public: /// constructors/assignmentoperator/destructor diff --git a/svx/source/sdr/attribute/sdrtextattribute.cxx b/svx/source/sdr/attribute/sdrtextattribute.cxx index 57d2dfd..45b55fb 100644 --- a/svx/source/sdr/attribute/sdrtextattribute.cxx +++ b/svx/source/sdr/attribute/sdrtextattribute.cxx @@ -25,7 +25,7 @@ #include <editeng/editobj.hxx> #include <editeng/flditem.hxx> #include <svx/sdr/properties/properties.hxx> - +#include <rtl/instance.hxx> namespace drawinglayer @@ -35,9 +35,6 @@ namespace drawinglayer class ImpSdrTextAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // all-text attributes. The SdrText itself and a copy // of the OPO const SdrText* mpSdrText; @@ -90,8 +87,7 @@ namespace drawinglayer bool bInEditMode, bool bFixedCellHeight, bool bWrongSpell) - : mnRefCount(0), - mpSdrText(pSdrText), + : mpSdrText(pSdrText), mpOutlinerParaObject(new OutlinerParaObject(rOutlinerParaObject)), maSdrFormTextAttribute(), maTextLeftDistance(aTextLeftDistance), @@ -128,8 +124,7 @@ namespace drawinglayer } ImpSdrTextAttribute() - : mnRefCount(0), - mpSdrText(0), + : mpSdrText(0), mpOutlinerParaObject(0), maSdrFormTextAttribute(), maTextLeftDistance(0), @@ -151,14 +146,6 @@ namespace drawinglayer { } - ~ImpSdrTextAttribute() - { - if(mpOutlinerParaObject) - { - delete mpOutlinerParaObject; - } - } - // data read access const SdrText& getSdrText() const { @@ -241,24 +228,14 @@ namespace drawinglayer && isFixedCellHeight() == rCandidate.isFixedCellHeight() && isWrongSpell() == rCandidate.isWrongSpell()); } - - static ImpSdrTextAttribute* get_global_default() - { - static ImpSdrTextAttribute* pDefault = 0; - - if(!pDefault) - { - // use default constructor - pDefault = new ImpSdrTextAttribute(); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< SdrTextAttribute::ImplType, theGlobalDefault > {}; + } + SdrTextAttribute::SdrTextAttribute( const SdrText& rSdrText, const OutlinerParaObject& rOutlinerParaObject, @@ -278,75 +255,47 @@ namespace drawinglayer bool bInEditMode, bool bFixedCellHeight, bool bWrongSpell) - : mpSdrTextAttribute(new ImpSdrTextAttribute( - &rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance, aTextUpperDistance, - aTextRightDistance, aTextLowerDistance, aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour, - bFitToSize, bAutoFit, bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell)) + : mpSdrTextAttribute( + ImpSdrTextAttribute( + &rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance, + aTextUpperDistance, aTextRightDistance, aTextLowerDistance, + aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour, bFitToSize, bAutoFit, + bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell)) { } SdrTextAttribute::SdrTextAttribute() - : mpSdrTextAttribute(ImpSdrTextAttribute::get_global_default()) + : mpSdrTextAttribute(theGlobalDefault::get()) { - mpSdrTextAttribute->mnRefCount++; } SdrTextAttribute::SdrTextAttribute(const SdrTextAttribute& rCandidate) : mpSdrTextAttribute(rCandidate.mpSdrTextAttribute) { - mpSdrTextAttribute->mnRefCount++; } SdrTextAttribute::~SdrTextAttribute() { - if(mpSdrTextAttribute->mnRefCount) - { - mpSdrTextAttribute->mnRefCount--; - } - else - { - delete mpSdrTextAttribute; - } } bool SdrTextAttribute::isDefault() const { - return mpSdrTextAttribute == ImpSdrTextAttribute::get_global_default(); + return mpSdrTextAttribute.same_object(theGlobalDefault::get()); } SdrTextAttribute& SdrTextAttribute::operator=(const SdrTextAttribute& rCandidate) { - if(rCandidate.mpSdrTextAttribute != mpSdrTextAttribute) - { - if(mpSdrTextAttribute->mnRefCount) - { - mpSdrTextAttribute->mnRefCount--; - } - else - { - delete mpSdrTextAttribute; - } - - mpSdrTextAttribute = rCandidate.mpSdrTextAttribute; - mpSdrTextAttribute->mnRefCount++; - } - + mpSdrTextAttribute = rCandidate.mpSdrTextAttribute; return *this; } bool SdrTextAttribute::operator==(const SdrTextAttribute& rCandidate) const { - if(rCandidate.mpSdrTextAttribute == mpSdrTextAttribute) - { - return true; - } - + // tdf#87509 default attr is always != non-default attr, even with same values if(rCandidate.isDefault() != isDefault()) - { return false; - } - return (*rCandidate.mpSdrTextAttribute == *mpSdrTextAttribute); + return rCandidate.mpSdrTextAttribute == mpSdrTextAttribute; } const SdrText& SdrTextAttribute::getSdrText() const commit 27e1a92d3bddf3c3e8595256e67aff006a402b6a Author: Thorsten Behrens <[email protected]> Date: Sun May 24 16:12:01 2015 +0200 tdf#62525: use cow_wrapper for SdrFormTextOutlineAttribute Change-Id: I7f75833bfec2cde140ded1dfe60aed2684905b0a diff --git a/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx b/svx/inc/sdr/attribute/sdrformtextoutlineattribute.hxx index 979762c..121f45b 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 23a8bf8..1126013 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 commit 6a42657fa9afc93c3e4b7afc0c00c0de8e704169 Author: Thorsten Behrens <[email protected]> Date: Sun May 24 12:41:24 2015 +0200 tdf#62525: use cow_wrapper for SdrFormTextAttribute Change-Id: I0fd55ea6c775d771e001c0db78bb72c50e9b81cf diff --git a/include/svx/sdr/attribute/sdrformtextattribute.hxx b/include/svx/sdr/attribute/sdrformtextattribute.hxx index 970fbb5..466b95e 100644 --- a/include/svx/sdr/attribute/sdrformtextattribute.hxx +++ b/include/svx/sdr/attribute/sdrformtextattribute.hxx @@ -23,7 +23,7 @@ #include <sal/types.h> #include <svx/xenum.hxx> #include <tools/color.hxx> - +#include <o3tl/cow_wrapper.hxx> // predefines @@ -42,8 +42,11 @@ namespace drawinglayer { class SdrFormTextAttribute { + public: + typedef o3tl::cow_wrapper< ImpSdrFormTextAttribute > ImplType; + private: - ImpSdrFormTextAttribute* mpSdrFormTextAttribute; + ImplType mpSdrFormTextAttribute; public: /// constructors/assignmentoperator/destructor diff --git a/svx/source/sdr/attribute/sdrformtextattribute.cxx b/svx/source/sdr/attribute/sdrformtextattribute.cxx index 2210191..03af4df 100644 --- a/svx/source/sdr/attribute/sdrformtextattribute.cxx +++ b/svx/source/sdr/attribute/sdrformtextattribute.cxx @@ -45,6 +45,7 @@ #include <sdr/attribute/sdrformtextoutlineattribute.hxx> #include <com/sun/star/drawing/LineCap.hpp> #include <com/sun/star/drawing/LineStyle.hpp> +#include <rtl/instance.hxx> // helper to get line, stroke and transparence attributes from SfxItemSet @@ -150,9 +151,6 @@ namespace drawinglayer class ImpSdrFormTextAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // FormText (FontWork) Attributes sal_Int32 mnFormTextDistance; // distance from line in upright direction sal_Int32 mnFormTextStart; // shift from polygon start @@ -174,8 +172,7 @@ namespace drawinglayer bool mbFormTextOutline : 1; // show contour of objects explicit ImpSdrFormTextAttribute(const SfxItemSet& rSet) - : mnRefCount(0), - mnFormTextDistance(static_cast<const XFormTextDistanceItem&>(rSet.Get(XATTR_FORMTXTDISTANCE)).GetValue()), + : mnFormTextDistance(static_cast<const XFormTextDistanceItem&>(rSet.Get(XATTR_FORMTXTDISTANCE)).GetValue()), mnFormTextStart(static_cast<const XFormTextStartItem&>(rSet.Get(XATTR_FORMTXTSTART)).GetValue()), mnFormTextShdwXVal(static_cast<const XFormTextShadowXValItem&>(rSet.Get(XATTR_FORMTXTSHDWXVAL)).GetValue()), mnFormTextShdwYVal(static_cast<const XFormTextShadowYValItem&>(rSet.Get(XATTR_FORMTXTSHDWYVAL)).GetValue()), @@ -215,8 +212,7 @@ namespace drawinglayer } ImpSdrFormTextAttribute() - : mnRefCount(0), - mnFormTextDistance(0), + : mnFormTextDistance(0), mnFormTextStart(0), mnFormTextShdwXVal(0), mnFormTextShdwYVal(0), @@ -264,90 +260,51 @@ namespace drawinglayer && getFormTextMirror() == rCandidate.getFormTextMirror() && getFormTextOutline() == rCandidate.getFormTextOutline()); } - - static ImpSdrFormTextAttribute* get_global_default() - { - static ImpSdrFormTextAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrFormTextAttribute(); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< SdrFormTextAttribute::ImplType, theGlobalDefault > {}; + } + SdrFormTextAttribute::SdrFormTextAttribute(const SfxItemSet& rSet) - : mpSdrFormTextAttribute(new ImpSdrFormTextAttribute(rSet)) + : mpSdrFormTextAttribute(ImpSdrFormTextAttribute(rSet)) { } SdrFormTextAttribute::SdrFormTextAttribute() - : mpSdrFormTextAttribute(ImpSdrFormTextAttribute::get_global_default()) + : mpSdrFormTextAttribute(theGlobalDefault::get()) { - mpSdrFormTextAttribute->mnRefCount++; } SdrFormTextAttribute::SdrFormTextAttribute(const SdrFormTextAttribute& rCandidate) : mpSdrFormTextAttribute(rCandidate.mpSdrFormTextAttribute) { - mpSdrFormTextAttribute->mnRefCount++; } SdrFormTextAttribute::~SdrFormTextAttribute() { - if(mpSdrFormTextAttribute->mnRefCount) - { - mpSdrFormTextAttribute->mnRefCount--; - } - else - { - delete mpSdrFormTextAttribute; - } } bool SdrFormTextAttribute::isDefault() const { - return mpSdrFormTextAttribute == ImpSdrFormTextAttribute::get_global_default(); + return mpSdrFormTextAttribute.same_object(theGlobalDefault::get()); } SdrFormTextAttribute& SdrFormTextAttribute::operator=(const SdrFormTextAttribute& rCandidate) { - if(rCandidate.mpSdrFormTextAttribute != mpSdrFormTextAttribute) - { - if(mpSdrFormTextAttribute->mnRefCount) - { - mpSdrFormTextAttribute->mnRefCount--; - } - else - { - delete mpSdrFormTextAttribute; - } - - mpSdrFormTextAttribute = rCandidate.mpSdrFormTextAttribute; - mpSdrFormTextAttribute->mnRefCount++; - } - + mpSdrFormTextAttribute = rCandidate.mpSdrFormTextAttribute; return *this; } bool SdrFormTextAttribute::operator==(const SdrFormTextAttribute& rCandidate) const { - if(rCandidate.mpSdrFormTextAttribute == mpSdrFormTextAttribute) - { - return true; - } - + // tdf#87509 default attr is always != non-default attr, even with same values if(rCandidate.isDefault() != isDefault()) - { return false; - } - return (*rCandidate.mpSdrFormTextAttribute == *mpSdrFormTextAttribute); + return rCandidate.mpSdrFormTextAttribute == mpSdrFormTextAttribute; } sal_Int32 SdrFormTextAttribute::getFormTextDistance() const commit 551c204740a37c8dbc7acd35bc9fe683ade3fe80 Author: Thorsten Behrens <[email protected]> Date: Sun May 24 11:53:59 2015 +0200 Fix tdf#87509 - default sdr attribute is special object. The drawinglayer attributes signal defaultness by object identity, not value equalness. That should fix a number of subtle cache and redraw problems. Change-Id: I049ffda228a48db71cef108571805c6e41e4b149 diff --git a/drawinglayer/source/attribute/fillgradientattribute.cxx b/drawinglayer/source/attribute/fillgradientattribute.cxx index 2689d07..497817e 100644 --- a/drawinglayer/source/attribute/fillgradientattribute.cxx +++ b/drawinglayer/source/attribute/fillgradientattribute.cxx @@ -142,6 +142,10 @@ namespace drawinglayer bool FillGradientAttribute::operator==(const FillGradientAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillGradientAttribute == mpFillGradientAttribute; } diff --git a/drawinglayer/source/attribute/fillgraphicattribute.cxx b/drawinglayer/source/attribute/fillgraphicattribute.cxx index bd7b98e..89422be 100644 --- a/drawinglayer/source/attribute/fillgraphicattribute.cxx +++ b/drawinglayer/source/attribute/fillgraphicattribute.cxx @@ -120,6 +120,10 @@ namespace drawinglayer bool FillGraphicAttribute::operator==(const FillGraphicAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillGraphicAttribute == mpFillGraphicAttribute; } diff --git a/drawinglayer/source/attribute/fillhatchattribute.cxx b/drawinglayer/source/attribute/fillhatchattribute.cxx index 9e3adc7..f54db08 100644 --- a/drawinglayer/source/attribute/fillhatchattribute.cxx +++ b/drawinglayer/source/attribute/fillhatchattribute.cxx @@ -131,6 +131,10 @@ namespace drawinglayer bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpFillHatchAttribute == mpFillHatchAttribute; } diff --git a/drawinglayer/source/attribute/lineattribute.cxx b/drawinglayer/source/attribute/lineattribute.cxx index 6cf96e1..6d22e56 100644 --- a/drawinglayer/source/attribute/lineattribute.cxx +++ b/drawinglayer/source/attribute/lineattribute.cxx @@ -118,6 +118,10 @@ namespace drawinglayer bool LineAttribute::operator==(const LineAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpLineAttribute == mpLineAttribute; } diff --git a/drawinglayer/source/attribute/linestartendattribute.cxx b/drawinglayer/source/attribute/linestartendattribute.cxx index f11e66f..f3a0822 100644 --- a/drawinglayer/source/attribute/linestartendattribute.cxx +++ b/drawinglayer/source/attribute/linestartendattribute.cxx @@ -110,6 +110,10 @@ namespace drawinglayer bool LineStartEndAttribute::operator==(const LineStartEndAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpLineStartEndAttribute == mpLineStartEndAttribute; } diff --git a/drawinglayer/source/attribute/sdrfillattribute.cxx b/drawinglayer/source/attribute/sdrfillattribute.cxx index aacfa87..2ad96fe 100644 --- a/drawinglayer/source/attribute/sdrfillattribute.cxx +++ b/drawinglayer/source/attribute/sdrfillattribute.cxx @@ -126,6 +126,10 @@ namespace drawinglayer bool SdrFillAttribute::operator==(const SdrFillAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrFillAttribute == mpSdrFillAttribute; } diff --git a/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx b/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx index 4ad7cdb..ea7e691 100644 --- a/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx +++ b/drawinglayer/source/attribute/sdrfillgraphicattribute.cxx @@ -161,6 +161,10 @@ namespace drawinglayer bool SdrFillGraphicAttribute::operator==(const SdrFillGraphicAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrFillGraphicAttribute == mpSdrFillGraphicAttribute; } diff --git a/drawinglayer/source/attribute/sdrlightingattribute3d.cxx b/drawinglayer/source/attribute/sdrlightingattribute3d.cxx index 9e3f809..43b4b94 100644 --- a/drawinglayer/source/attribute/sdrlightingattribute3d.cxx +++ b/drawinglayer/source/attribute/sdrlightingattribute3d.cxx @@ -102,6 +102,10 @@ namespace drawinglayer bool SdrLightingAttribute::operator==(const SdrLightingAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLightingAttribute == mpSdrLightingAttribute; } diff --git a/drawinglayer/source/attribute/sdrlineattribute.cxx b/drawinglayer/source/attribute/sdrlineattribute.cxx index 5afcac0..f1842fa 100644 --- a/drawinglayer/source/attribute/sdrlineattribute.cxx +++ b/drawinglayer/source/attribute/sdrlineattribute.cxx @@ -142,6 +142,10 @@ namespace drawinglayer bool SdrLineAttribute::operator==(const SdrLineAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLineAttribute == mpSdrLineAttribute; } diff --git a/drawinglayer/source/attribute/sdrlinestartendattribute.cxx b/drawinglayer/source/attribute/sdrlinestartendattribute.cxx index 20aa45d..b64f98c 100644 --- a/drawinglayer/source/attribute/sdrlinestartendattribute.cxx +++ b/drawinglayer/source/attribute/sdrlinestartendattribute.cxx @@ -144,6 +144,10 @@ namespace drawinglayer bool SdrLineStartEndAttribute::operator==(const SdrLineStartEndAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrLineStartEndAttribute == mpSdrLineStartEndAttribute; } diff --git a/drawinglayer/source/attribute/sdrsceneattribute3d.cxx b/drawinglayer/source/attribute/sdrsceneattribute3d.cxx index 5776d20..a873440 100644 --- a/drawinglayer/source/attribute/sdrsceneattribute3d.cxx +++ b/drawinglayer/source/attribute/sdrsceneattribute3d.cxx @@ -123,6 +123,10 @@ namespace drawinglayer bool SdrSceneAttribute::operator==(const SdrSceneAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpSdrSceneAttribute == mpSdrSceneAttribute; } diff --git a/drawinglayer/source/attribute/sdrshadowattribute.cxx b/drawinglayer/source/attribute/sdrshadowattribute.cxx index 9630593..907423a 100644 --- a/drawinglayer/source/attribute/sdrshadowattribute.cxx +++ b/drawinglayer/source/attribute/sdrshadowattribute.cxx @@ -109,6 +109,10 @@ namespace drawinglayer bool SdrShadowAttribute::operator==(const SdrShadowAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return mpSdrShadowAttribute == rCandidate.mpSdrShadowAttribute; } diff --git a/drawinglayer/source/attribute/strokeattribute.cxx b/drawinglayer/source/attribute/strokeattribute.cxx index 08445b0..efbcc5d 100644 --- a/drawinglayer/source/attribute/strokeattribute.cxx +++ b/drawinglayer/source/attribute/strokeattribute.cxx @@ -110,6 +110,10 @@ namespace drawinglayer bool StrokeAttribute::operator==(const StrokeAttribute& rCandidate) const { + // tdf#87509 default attr is always != non-default attr, even with same values + if(rCandidate.isDefault() != isDefault()) + return false; + return rCandidate.mpStrokeAttribute == mpStrokeAttribute; } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
