diff options
Diffstat (limited to 'svx/source/sdr/overlay')
-rw-r--r-- | svx/source/sdr/overlay/overlayobject.cxx | 37 | ||||
-rw-r--r-- | svx/source/sdr/overlay/overlayselection.cxx | 2 |
2 files changed, 34 insertions, 5 deletions
diff --git a/svx/source/sdr/overlay/overlayobject.cxx b/svx/source/sdr/overlay/overlayobject.cxx index aae05f9f0b96..d480007d4852 100644 --- a/svx/source/sdr/overlay/overlayobject.cxx +++ b/svx/source/sdr/overlay/overlayobject.cxx @@ -26,8 +26,9 @@ #include <basegfx/polygon/b2dpolypolygon.hxx> #include <basegfx/polygon/b2dpolygontools.hxx> #include <basegfx/polygon/b2dpolypolygontools.hxx> +#include <basegfx/matrix/b2dhommatrixtools.hxx> #include <drawinglayer/primitive2d/polygonprimitive2d.hxx> - +#include <drawinglayer/primitive2d/transformprimitive2d.hxx> namespace sdr { @@ -37,7 +38,8 @@ namespace sdr { const basegfx::B2DRange aPreviousRange(maBaseRange); maBaseRange.reset(); - setPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DContainer()); + resetPrimitive2DSequence(); +// setPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DContainer()); if(getOverlayManager() && !aPreviousRange.isEmpty()) { @@ -91,6 +93,8 @@ namespace sdr OverlayObject::OverlayObject(Color aBaseColor) : Event(), mpOverlayManager(nullptr), + maPrimitive2DSequence(), + maOffset(0.0, 0.0), maBaseColor(aBaseColor), mbIsVisible(true), mbIsHittable(true), @@ -109,8 +113,21 @@ namespace sdr if(getPrimitive2DSequence().empty()) { // no existing sequence; create one - const_cast< OverlayObject* >(this)->setPrimitive2DSequence( - const_cast< OverlayObject* >(this)->createOverlayObjectPrimitive2DSequence()); + const_cast< OverlayObject* >(this)->maPrimitive2DSequence = const_cast< OverlayObject* >(this)->createOverlayObjectPrimitive2DSequence(); + + if(!getOffset().equalZero()) + { + // embed to offset transformation + const basegfx::B2DHomMatrix aTranslateGridOffset( + basegfx::utils::createTranslateB2DHomMatrix( + getOffset())); + const drawinglayer::primitive2d::Primitive2DReference aEmbed( + new drawinglayer::primitive2d::TransformPrimitive2D( + aTranslateGridOffset, + maPrimitive2DSequence)); + + const_cast< OverlayObject* >(this)->maPrimitive2DSequence = drawinglayer::primitive2d::Primitive2DContainer { aEmbed }; + } } return getPrimitive2DSequence(); @@ -170,6 +187,18 @@ namespace sdr } } + void OverlayObject::setOffset(const basegfx::B2DVector& rOffset) + { + if(rOffset != maOffset) + { + // remember new value + maOffset = rOffset; + + // register change (after change) + objectChange(); + } + } + void OverlayObject::Trigger(sal_uInt32 /*nTime*/) { // default does not register again diff --git a/svx/source/sdr/overlay/overlayselection.cxx b/svx/source/sdr/overlay/overlayselection.cxx index 5d22203a4e4e..a1fa52810eb2 100644 --- a/svx/source/sdr/overlay/overlayselection.cxx +++ b/svx/source/sdr/overlay/overlayselection.cxx @@ -196,7 +196,7 @@ namespace sdr || nNewTransparence != mnLastTransparence) { // conditions of last local decomposition have changed, delete - const_cast< OverlaySelection* >(this)->setPrimitive2DSequence(drawinglayer::primitive2d::Primitive2DContainer()); + const_cast< OverlaySelection* >(this)->resetPrimitive2DSequence(); } } |