svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx | 26 ++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
New commits: commit fd2174d55dadc3b4dcf6b15b5789077bb2951698 Author: Armin Le Grand <armin.le.gr...@me.com> AuthorDate: Mon Nov 4 15:28:22 2019 +0100 Commit: Armin Le Grand <armin.le.gr...@me.com> CommitDate: Mon Nov 4 20:35:27 2019 +0100 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í <xiscofa...@libreoffice.org> Tested-by: Jenkins Reviewed-by: Armin Le Grand <armin.le.gr...@me.com> 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 ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits