include/svx/svdedtv.hxx        |    6 +++++-
 sd/source/ui/func/futransf.cxx |   13 ++++++++-----
 svx/source/svdraw/svdedtv1.cxx |    8 +++++++-
 3 files changed, 20 insertions(+), 7 deletions(-)

New commits:
commit 2246b6a2887b90efc712c4479b19609cf9307a3d
Author:     mert <mert.tu...@collabora.com>
AuthorDate: Thu Mar 4 12:17:27 2021 +0300
Commit:     Mert Tumer <mert.tu...@collabora.com>
CommitDate: Fri Mar 12 04:36:28 2021 +0100

    Fix wrong position on move when page has margin
    
    Change-Id: I9ac2d9914b86210ca2148b44488c2c70cc5870d4
    Signed-off-by: mert <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111949
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111929
    Tested-by: Jenkins

diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index 916fdaeb186b..eb815b728cb3 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -304,7 +304,11 @@ public:
     // geometrical attribute (position, size, rotation angle)
     // A PageOrigin set at a position is taken into account.
     SfxItemSet GetGeoAttrFromMarked() const;
-    void SetGeoAttrToMarked(const SfxItemSet& rAttr);
+    // In LOK, interactive shape movement uses this function
+    // in that case, margin is not taken into account
+    // and the final position of the shape becomes incorrect
+    // However, "Position and Size" dialog and other cases already add the 
margins.
+    void SetGeoAttrToMarked(const SfxItemSet& rAttr, bool addPageMargin = 
false);
 
     // Returns NULL if:
     // - nothing is marked,
diff --git a/sd/source/ui/func/futransf.cxx b/sd/source/ui/func/futransf.cxx
index fa7398e48b43..6c07e0e70be6 100644
--- a/sd/source/ui/func/futransf.cxx
+++ b/sd/source/ui/func/futransf.cxx
@@ -28,6 +28,7 @@
 #include <sdresid.hxx>
 #include <drawdoc.hxx>
 #include <svx/svxdlg.hxx>
+#include <comphelper/lok.hxx>
 
 #include <memory>
 
@@ -48,14 +49,13 @@ rtl::Reference<FuPoor> FuTransform::Create( ViewShell* 
pViewSh, ::sd::Window* pW
 
 namespace {
 
-void setUndo(::sd::View* pView, const SfxItemSet* pArgs)
+void setUndo(::sd::View* pView, const SfxItemSet* pArgs, bool addPageMargin)
 {
     // Undo
     OUString aString = pView->GetDescriptionOfMarkedObjects() +
         " " + SdResId(STR_TRANSFORM);
     pView->BegUndo(aString);
-
-    pView->SetGeoAttrToMarked(*pArgs);
+    pView->SetGeoAttrToMarked(*pArgs, addPageMargin);
     pView->SetAttributes(*pArgs);
     pView->EndUndo();
 }
@@ -71,7 +71,9 @@ void FuTransform::DoExecute( SfxRequest& rReq )
 
     if (pArgs)
     {
-        setUndo(mpView, pArgs);
+        // If this comes from LOK, that means the shape is moved by mouse
+        // only then pArgs is pre-set.
+        setUndo(mpView, pArgs, comphelper::LibreOfficeKit::isActive());
         return;
     }
 
@@ -115,7 +117,8 @@ void FuTransform::DoExecute( SfxRequest& rReq )
         if (nResult == RET_OK)
         {
             pRequest->Done(*(pDlg->GetOutputItemSet()));
-            setUndo(mpView, pRequest->GetArgs());
+            // Page margin is already calculated at this point.
+            setUndo(mpView, pRequest->GetArgs(), false);
         }
 
         // deferred until the dialog ends
diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx
index f2128824b6fa..5b17b8852462 100644
--- a/svx/source/svdraw/svdedtv1.cxx
+++ b/svx/source/svdraw/svdedtv1.cxx
@@ -1512,7 +1512,7 @@ static Point ImpGetPoint(const tools::Rectangle& rRect, 
RectPoint eRP)
     return Point(); // Should not happen!
 }
 
-void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr)
+void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr, bool 
addPageMargin)
 {
     const bool bTiledRendering = comphelper::LibreOfficeKit::isActive();
 
@@ -1520,6 +1520,12 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& 
rAttr)
 
     if(GetSdrPageView())
     {
+        if (addPageMargin)
+        {
+            SdrPage * pPage = GetSdrPageView()->GetPage();
+            Point upperLeft(pPage->GetLeftBorder(), pPage->GetUpperBorder());
+            aRect.Move(upperLeft.getX(), upperLeft.getY());
+        }
         GetSdrPageView()->LogicToPagePos(aRect);
     }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to