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

Reply via email to