svx/source/svdraw/svdmrkv.cxx      |   21 ++++++++++++++++-----
 sw/source/core/draw/dview.cxx      |    6 ++++--
 sw/source/uibase/shells/drawsh.cxx |   12 +++++++++++-
 sw/source/uibase/uiview/view2.cxx  |    7 ++++++-
 4 files changed, 37 insertions(+), 9 deletions(-)

New commits:
commit 0a5606dc180c7a643ff4820f7e05413398352b2d
Author:     merttumer <mert.tu...@collabora.com>
AuthorDate: Mon May 24 10:52:13 2021 +0300
Commit:     Mert Tumer <mert.tu...@collabora.com>
CommitDate: Tue May 25 06:19:44 2021 +0200

    Extended MoveShapeHandle command for Anchors as well
    
    Change-Id: I0e2811802f17831097a86103571b505a7557717a
    Signed-off-by: merttumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116040
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 875d0dfc3993..61f7d472ecd6 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -1002,6 +1002,7 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle 
const & rRect, SfxView
             {
                 boost::property_tree::ptree responseJSON;
                 boost::property_tree::ptree others;
+                boost::property_tree::ptree anchor;
                 boost::property_tree::ptree rectangle;
                 boost::property_tree::ptree poly;
                 boost::property_tree::ptree custom;
@@ -1036,6 +1037,14 @@ void 
SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle const & rRect, SfxView
                     {
                         selectedNode = &custom;
                     }
+                    else if (kind == 
static_cast<sal_Int32>(SdrHdlKind::Anchor) || kind == 
static_cast<sal_Int32>(SdrHdlKind::Anchor_TR))
+                    {
+                        if (getSdrModelFromSdrView().IsWriter())
+                            selectedNode = &anchor;
+                        else
+                            // put it to others as we dont render them except 
in writer
+                            selectedNode = &others;
+                    }
                     else
                     {
                         selectedNode = &others;
@@ -1054,6 +1063,7 @@ void SdrMarkView::SetMarkHandlesForLOKit(tools::Rectangle 
const & rRect, SfxView
                 nodes.add_child("rectangle", rectangle);
                 nodes.add_child("poly", poly);
                 nodes.add_child("custom", custom);
+                nodes.add_child("anchor", anchor);
                 nodes.add_child("others", others);
                 responseJSON.add_child("kinds", nodes);
                 std::stringstream aStream;
@@ -1415,11 +1425,6 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* 
pOtherShell)
         }
     }
 
-    // moved it here to access all the handles for callback.
-    if (bTiledRendering && pViewShell)
-    {
-        SetMarkHandlesForLOKit(aRect, pOtherShell);
-    }
     // rotation point/axis of reflection
     if(!bLimitedRotation)
     {
@@ -1432,6 +1437,12 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* 
pOtherShell)
     // add custom handles (used by other apps, e.g. AnchorPos)
     AddCustomHdl();
 
+    // moved it here to access all the handles for callback.
+    if (bTiledRendering && pViewShell)
+    {
+        SetMarkHandlesForLOKit(aRect, pOtherShell);
+    }
+
     // try to restore focus handle index from remembered values
     if(bSaveOldFocus)
     {
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
index c1a7b6a8cbbc..f9ef11b99897 100644
--- a/sw/source/core/draw/dview.cxx
+++ b/sw/source/core/draw/dview.cxx
@@ -239,8 +239,10 @@ void SwDrawView::AddCustomHdl()
     }
 
     // add anchor handle:
-    maHdlList.AddHdl( std::make_unique<SwSdrHdl>( aPos, ( pAnch->IsVertical() 
&& !pAnch->IsVertLR() ) ||
-                                     pAnch->IsRightToLeft() ) );
+    std::unique_ptr<SdrHdl> hdl = std::make_unique<SwSdrHdl>( aPos, ( 
pAnch->IsVertical() && !pAnch->IsVertLR() ) ||
+                                     pAnch->IsRightToLeft() );
+    hdl->SetObjHdlNum(maHdlList.GetHdlCount());
+    maHdlList.AddHdl(std::move(hdl));
 }
 
 SdrObject* SwDrawView::GetMaxToTopObj( SdrObject* pObj ) const
diff --git a/sw/source/uibase/shells/drawsh.cxx 
b/sw/source/uibase/shells/drawsh.cxx
index a37d57f84e28..ef91d2efb9c3 100644
--- a/sw/source/uibase/shells/drawsh.cxx
+++ b/sw/source/uibase/shells/drawsh.cxx
@@ -231,7 +231,17 @@ void SwDrawShell::Execute(SfxRequest &rReq)
                 const sal_uLong handleNum = handleNumItem->GetValue();
                 const sal_uLong newPosX = newPosXTwips->GetValue();
                 const sal_uLong newPosY = newPosYTwips->GetValue();
-                pSdrView->MoveShapeHandle(handleNum, Point(newPosX, newPosY), 
OrdNum ? OrdNum->GetValue() : -1);
+                const Point mPoint(newPosX, newPosY);
+                const SdrHdl* handle = 
pSdrView->GetHdlList().GetHdl(handleNum);
+                if (handle->GetKind() == SdrHdlKind::Anchor || 
handle->GetKind() == SdrHdlKind::Anchor_TR)
+                {
+                    rSh.FindAnchorPos(mPoint, /*bMoveIt=*/true);
+                    SdrDragView* pDragView = 
dynamic_cast<SdrDragView*>(pSdrView);
+                    if (pDragView != nullptr)
+                        pDragView->ModelHasChanged();
+                }
+                else
+                    pSdrView->MoveShapeHandle(handleNum, mPoint, OrdNum ? 
OrdNum->GetValue() : -1);
             }
         }
         break;
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index 1224842d09fe..1e2356884137 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1307,7 +1307,12 @@ void SwView::Execute(SfxRequest &rReq)
                 const sal_uLong handleNum = handleNumItem->GetValue();
                 const sal_uLong newPosX = newPosXTwips->GetValue();
                 const sal_uLong newPosY = newPosYTwips->GetValue();
-                pSdrView->MoveShapeHandle(handleNum, Point(newPosX, newPosY), 
OrdNum ? OrdNum->GetValue() : -1);
+                const Point mPoint(newPosX, newPosY);
+                const SdrHdl* handle = 
pSdrView->GetHdlList().GetHdl(handleNum);
+                if (handle->GetKind() == SdrHdlKind::Anchor || 
handle->GetKind() == SdrHdlKind::Anchor_TR)
+                    m_pWrtShell->FindAnchorPos(mPoint, /*bMoveIt=*/true);
+                else
+                    pSdrView->MoveShapeHandle(handleNum, mPoint, OrdNum ? 
OrdNum->GetValue() : -1);
             }
             break;
         }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to