summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authormerttumer <mert.tumer@collabora.com>2021-04-02 16:18:05 +0300
committerMert Tumer <mert.tumer@collabora.com>2021-04-20 06:52:26 +0200
commitb18bff18785cc194f9918f6bdf000069523827ef (patch)
treeff3fcbb5b90a5af07f4549006d80cdf3d072705b /include
parent7f26b1b47819754ed5461517300346961a5bbbe4 (diff)
lok: Pass object ord num in the uno command
When multiple objects' glue points collide the ordnum will be used to decide which glue point to connect to for the connectors. Without that the default logic chooses the lowest ordered object which is searched and found in the object list Change-Id: I64579d28bbe6cbd92bab745838fe2995585b6a3f Signed-off-by: merttumer <mert.tumer@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113517 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114032 Tested-by: Jenkins
Diffstat (limited to 'include')
-rw-r--r--include/svx/svddrag.hxx12
-rw-r--r--include/svx/svdoedge.hxx2
-rw-r--r--include/svx/svdview.hxx3
3 files changed, 15 insertions, 2 deletions
diff --git a/include/svx/svddrag.hxx b/include/svx/svddrag.hxx
index 80c2406b9046..6718e5f36b5d 100644
--- a/include/svx/svddrag.hxx
+++ b/include/svx/svddrag.hxx
@@ -79,6 +79,16 @@ class SVXCORE_DLLPUBLIC SdrDragStat final
sal_Int32 GetPrevPos() const { return mvPnts.size()-(mvPnts.size()>1 ? 2 : 1); }
+ // This is passed all the way through to ApplySpecialDrag of the Edge Object
+ // For LOK, we cannot really specify which glue point to select by default
+ // It selects the nearest glue points after DragEnd event.
+ // When multiple objects are on top of each other or somehow their glue points
+ // collide, the glue point is selected from the lowest order numbered object
+ // We can pass the ord number information inside the draginfo and choose the correct shape
+ struct {
+ sal_Int32 objectOrdNum = -1;
+ } mGlueOptions;
+
public:
SdrDragStat() { Reset(); }
~SdrDragStat();
@@ -158,6 +168,8 @@ public:
// Also considering 1stPointAsCenter
void TakeCreateRect(tools::Rectangle& rRect) const;
+
+ auto& GetGlueOptions() { return mGlueOptions; }
};
#endif // INCLUDED_SVX_SVDDRAG_HXX
diff --git a/include/svx/svdoedge.hxx b/include/svx/svdoedge.hxx
index fe09104dbc4e..17108ad856ec 100644
--- a/include/svx/svdoedge.hxx
+++ b/include/svx/svdoedge.hxx
@@ -177,7 +177,7 @@ protected:
XPolygon ImpCalcEdgeTrack(const Point& rPt1, tools::Long nAngle1, const tools::Rectangle& rBoundRect1, const tools::Rectangle& rBewareRect1,
const Point& rPt2, tools::Long nAngle2, const tools::Rectangle& rBoundRect2, const tools::Rectangle& rBewareRect2,
sal_uIntPtr* pnQuality, SdrEdgeInfoRec* pInfo) const;
- static bool ImpFindConnector(const Point& rPt, const SdrPageView& rPV, SdrObjConnection& rCon, const SdrEdgeObj* pThis, OutputDevice* pOut=nullptr);
+ static bool ImpFindConnector(const Point& rPt, const SdrPageView& rPV, SdrObjConnection& rCon, const SdrEdgeObj* pThis, OutputDevice* pOut=nullptr, SdrDragStat* pDragStat = nullptr);
static SdrEscapeDirection ImpCalcEscAngle(SdrObject const * pObj, const Point& aPt2);
void ImpSetTailPoint(bool bTail1, const Point& rPt);
void ImpUndirtyEdgeTrack(); // potential recalculation of the connection track
diff --git a/include/svx/svdview.hxx b/include/svx/svdview.hxx
index 149b17f9ece9..7020f6447b4d 100644
--- a/include/svx/svdview.hxx
+++ b/include/svx/svdview.hxx
@@ -242,7 +242,8 @@ public:
SdrPageWindow& rPageWindow,
const char* pDebugName) const;
- bool MoveShapeHandle(const sal_uInt32 handleNum, const Point& aEndPoint);
+ // Interactive Move Action programmaticaly
+ bool MoveShapeHandle(const sal_uInt32 handleNum, const Point& aEndPoint, const sal_Int32 aObjectOrdNum = -1);
};
// First of all the app creates a SdrModel.