summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@me.com>2019-11-04 15:28:22 +0100
committerArmin Le Grand <Armin.Le.Grand@me.com>2019-11-04 20:35:27 +0100
commitfd2174d55dadc3b4dcf6b15b5789077bb2951698 (patch)
treec8eca0fc7b4a67827cfbf9e6163c33bddceb0071 /svx
parent5dff78b49f489aaa552384e14225a798a8a093a6 (diff)
tdf#121963 apply GridOffset in isPrimitiveVisible
Need to take evtl. GridOffset into account for Controls in ViewObjectContactOfUnoControl::isPrimitiveVisible to get same coordinates inside adjustControlGeometry_throw Change-Id: Id6f0d1c7a4de4ee5908b50ee1a2217a0b078ecf5 Reviewed-on: https://gerrit.libreoffice.org/82031 Tested-by: Xisco FaulĂ­ <xiscofauli@libreoffice.org> Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx26
1 files changed, 25 insertions, 1 deletions
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
index 35e5f8f7dcdd..ed5459388400 100644
--- a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
@@ -54,6 +54,7 @@
#include <tools/diagnose_ex.h>
#include <tools/debug.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <drawinglayer/primitive2d/controlprimitive2d.hxx>
/*
@@ -1674,7 +1675,30 @@ namespace sdr { namespace contact {
#endif
if ( !rViewInformation.getViewport().isEmpty() )
- m_pImpl->positionAndZoomControl( rViewInformation.getObjectToViewTransformation() );
+ {
+ // tdf#121963 check and eventually pre-multiply ViewTransformation
+ // with GridOffset transformation to avoid alternating positions of
+ // FormControls which are victims of the non-linear calc ViewTransformation
+ // aka GridOffset. For other paths (e.g. repaint) this is included already
+ // as part of the object's sequence of B2DPrimitive - representation
+ // (see ViewObjectContact::getPrimitive2DSequence and how getGridOffset is used there)
+ basegfx::B2DHomMatrix aViewTransformation(rViewInformation.getObjectToViewTransformation());
+
+ if(GetObjectContact().supportsGridOffsets())
+ {
+ const basegfx::B2DVector& rGridOffset(getGridOffset());
+
+ if(0.0 != rGridOffset.getX() || 0.0 != rGridOffset.getY())
+ {
+ // pre-multiply: GridOffset needs to be applied directly to logic model data
+ // of object coordinates, so multiply GridOffset from right to make it
+ // work as 1st change - these objects may still be part of groups/hierarchies
+ aViewTransformation = aViewTransformation * basegfx::utils::createTranslateB2DHomMatrix(rGridOffset);
+ }
+ }
+
+ m_pImpl->positionAndZoomControl(aViewTransformation);
+ }
}
return ViewObjectContactOfSdrObj::isPrimitiveVisible( _rDisplayInfo );