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>
(cherry picked from commit fd2174d55dadc3b4dcf6b15b5789077bb2951698)
Reviewed-on: https://gerrit.libreoffice.org/82050
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx
index 9fcd285..ae6ecf6 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 );