summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormert <mert.tumer@collabora.com>2021-03-04 12:17:27 +0300
committerMert Tumer <mert.tumer@collabora.com>2021-03-09 09:37:31 +0100
commit206c5b374eb56ef1674bb0dbd0d199d2761ea469 (patch)
tree37aea741b1d2cf541022b829d104d2a3c097bfe2
parent13577b6c3d64c6cae673152c4d10489d8380bb7f (diff)
Fix wrong position on move when page has margin
Change-Id: I9ac2d9914b86210ca2148b44488c2c70cc5870d4 Signed-off-by: mert <mert.tumer@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111949 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r--include/svx/svdedtv.hxx6
-rw-r--r--sd/source/ui/func/futransf.cxx13
-rw-r--r--svx/source/svdraw/svdedtv1.cxx8
3 files changed, 20 insertions, 7 deletions
diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index 973a28cd1b9e..4351ccee2764 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -305,7 +305,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 96a805040cb9..a0dc99664c3f 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;
}
@@ -116,7 +118,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 cf29f4a268df..830ef238c590 100644
--- a/svx/source/svdraw/svdedtv1.cxx
+++ b/svx/source/svdraw/svdedtv1.cxx
@@ -1534,7 +1534,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();
@@ -1542,6 +1542,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);
}