summaryrefslogtreecommitdiff
path: root/svx/source/sdr/overlay
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/sdr/overlay')
-rw-r--r--svx/source/sdr/overlay/overlayobject.cxx37
-rw-r--r--svx/source/sdr/overlay/overlayselection.cxx2
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();
}
}