diff options
author | Armin Le Grand <Armin.Le.Grand@me.com> | 2019-11-04 15:28:22 +0100 |
---|---|---|
committer | Adolfo Jayme Barrientos <fitojb@ubuntu.com> | 2019-11-05 15:02:00 +0100 |
commit | e8720057aa0f4e612000d68f6de682f3afb8a1ea (patch) | |
tree | 0207384009456f562f019242079a8783bbc86136 /svx | |
parent | 8c1d6b3bb34afbd8483a4438f2ccd4e7b5310673 (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>
(cherry picked from commit fd2174d55dadc3b4dcf6b15b5789077bb2951698)
Reviewed-on: https://gerrit.libreoffice.org/82050
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx index 9fcd285572e2..ae6ecf62623e 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 ); |