[Libreoffice-commits] core.git: include/svx sd/qa svx/source sw/inc sw/qa sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Fri Sep 21 08:53:16 UTC 2018
include/svx/svdhdl.hxx | 3
include/svx/svdoashp.hxx | 2
include/svx/svdobj.hxx | 1
include/svx/svdocapt.hxx | 2
include/svx/svdocirc.hxx | 2
include/svx/svdoedge.hxx | 2
include/svx/svdograf.hxx | 2
include/svx/svdomeas.hxx | 2
include/svx/svdopath.hxx | 3
include/svx/svdorect.hxx | 2
include/svx/svdotable.hxx | 1
include/svx/svdotext.hxx | 2
include/svx/svdovirt.hxx | 1
sd/qa/unit/tiledrendering/tiledrendering.cxx | 6 -
svx/source/svdraw/svdhdl.cxx | 14 +-
svx/source/svdraw/svdoashp.cxx | 41 +++-----
svx/source/svdraw/svdobj.cxx | 38 ++-----
svx/source/svdraw/svdocapt.cxx | 31 +-----
svx/source/svdraw/svdocirc.cxx | 128 ++++++++++++-------------
svx/source/svdraw/svdoedge.cxx | 93 ++++++++++--------
svx/source/svdraw/svdograf.cxx | 7 -
svx/source/svdraw/svdomeas.cxx | 31 +++---
svx/source/svdraw/svdopath.cxx | 22 ----
svx/source/svdraw/svdorect.cxx | 103 +++++++++-----------
svx/source/svdraw/svdotxdr.cxx | 37 +++----
svx/source/svdraw/svdovirt.cxx | 51 +--------
svx/source/table/svdotable.cxx | 23 ----
sw/inc/dcontact.hxx | 2
sw/qa/extras/tiledrendering/tiledrendering.cxx | 6 -
sw/source/core/draw/dcontact.cxx | 16 +--
30 files changed, 292 insertions(+), 382 deletions(-)
New commits:
commit ffe84f49270e0a8818365ca7d1fd5242abff5562
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Sep 20 09:48:50 2018 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Sep 21 10:52:46 2018 +0200
remove SdrObject::GetHdl in favour of AddToHdlList
the code already says that using GetHdl is inefficient, and client code
should be using AddToHdlList, so just drop the bad one
Change-Id: I88c43154c8cc0988127b9292e4cda28917f54eb9
Reviewed-on: https://gerrit.libreoffice.org/60792
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/include/svx/svdhdl.hxx b/include/svx/svdhdl.hxx
index 0e954c16dce0..5416ec71c68d 100644
--- a/include/svx/svdhdl.hxx
+++ b/include/svx/svdhdl.hxx
@@ -461,6 +461,9 @@ public:
SdrHdl* RemoveHdl(size_t nNum);
void RemoveAllByKind(SdrHdlKind eKind);
+ // move the ownership of all the SdrHdl to rOther
+ void MoveTo(SdrHdlList& rOther);
+
// Last inserted handles are likely hit (if the handles are above each other)
SdrHdl* IsHdlListHit(const Point& rPnt) const;
SdrHdl* GetHdl(SdrHdlKind eKind1) const;
diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx
index ed90a91d79d0..e7f915992eae 100644
--- a/include/svx/svdoashp.hxx
+++ b/include/svx/svdoashp.hxx
@@ -240,7 +240,7 @@ public:
virtual SdrGluePointList* ForceGluePointList() override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl( sal_uInt32 nHdlNum ) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// #i33136#
static bool doConstructOrthogonal(const OUString& rName);
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index d01031c40112..5c5fb75ca26a 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -521,7 +521,6 @@ public:
/// An object that returns true from HasSpacialDrag() must provide these
/// methods (incl. FillHdlList()).
virtual sal_uInt32 GetHdlCount() const;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const;
virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
virtual void AddToHdlList(SdrHdlList& rHdlList) const;
diff --git a/include/svx/svdocapt.hxx b/include/svx/svdocapt.hxx
index 124e83c206b2..68bc32a51fae 100644
--- a/include/svx/svdocapt.hxx
+++ b/include/svx/svdocapt.hxx
@@ -106,7 +106,7 @@ public:
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdocirc.hxx b/include/svx/svdocirc.hxx
index 8ce5681094b4..b681ad5acc44 100644
--- a/include/svx/svdocirc.hxx
+++ b/include/svx/svdocirc.hxx
@@ -109,7 +109,7 @@ public:
virtual Point GetSnapPoint(sal_uInt32 i) const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdoedge.hxx b/include/svx/svdoedge.hxx
index 61b53414fa6d..0a68d6f84646 100644
--- a/include/svx/svdoedge.hxx
+++ b/include/svx/svdoedge.hxx
@@ -227,7 +227,7 @@ public:
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx
index 42cc1a37f83a..8cc7395a2283 100644
--- a/include/svx/svdograf.hxx
+++ b/include/svx/svdograf.hxx
@@ -179,7 +179,7 @@ public:
SdrGrafObj& operator=(const SdrGrafObj& rObj);
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx
index 409dbbf92d9c..374cdff602fd 100644
--- a/include/svx/svdomeas.hxx
+++ b/include/svx/svdomeas.hxx
@@ -95,7 +95,7 @@ public:
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdopath.hxx b/include/svx/svdopath.hxx
index 0f58f1f7354c..66c3b0410e5b 100644
--- a/include/svx/svdopath.hxx
+++ b/include/svx/svdopath.hxx
@@ -86,10 +86,9 @@ public:
virtual void RecalcSnapRect() override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const override;
virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const override;
- virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdorect.hxx b/include/svx/svdorect.hxx
index 15d5c3672f9b..00f1b481b733 100644
--- a/include/svx/svdorect.hxx
+++ b/include/svx/svdorect.hxx
@@ -99,7 +99,7 @@ public:
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// Special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdotable.hxx b/include/svx/svdotable.hxx
index 6f52fde2a7dc..72d5f25f627e 100644
--- a/include/svx/svdotable.hxx
+++ b/include/svx/svdotable.hxx
@@ -211,7 +211,6 @@ public:
virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// Special drag methods
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index deb8e74477cf..9bca148fd443 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -459,7 +459,7 @@ public:
virtual Point GetSnapPoint(sal_uInt32 i) const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
// special drag methods
virtual bool hasSpecialDrag() const override;
diff --git a/include/svx/svdovirt.hxx b/include/svx/svdovirt.hxx
index 45c04ccff893..5d562a73e2c9 100644
--- a/include/svx/svdovirt.hxx
+++ b/include/svx/svdovirt.hxx
@@ -77,7 +77,6 @@ public:
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual sal_uInt32 GetHdlCount() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const override;
virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const override;
virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index d629152c2217..f46b8ca0b63a 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -486,10 +486,12 @@ void SdTiledRenderingTest::testSetGraphicSelection()
sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell();
SdPage* pPage = pViewShell->GetActualPage();
SdrObject* pObject = pPage->GetObj(0);
+ SdrHdlList handleList(nullptr);
+ pObject->AddToHdlList(handleList);
// Make sure the rectangle has 8 handles: at each corner and at the center of each edge.
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(8), pObject->GetHdlCount());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(8), handleList.GetHdlCount());
// Take the bottom center one.
- SdrHdl* pHdl = pObject->GetHdl(6);
+ SdrHdl* pHdl = handleList.GetHdl(6);
CPPUNIT_ASSERT_EQUAL(int(SdrHdlKind::Lower), static_cast<int>(pHdl->GetKind()));
::tools::Rectangle aShapeBefore = pObject->GetSnapRect();
// Resize.
diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx
index 510b58d23b9c..31f232de4703 100644
--- a/svx/source/svdraw/svdhdl.cxx
+++ b/svx/source/svdraw/svdhdl.cxx
@@ -2251,11 +2251,9 @@ size_t SdrHdlList::GetHdlNum(const SdrHdl* pHdl) const
void SdrHdlList::AddHdl(SdrHdl* pHdl)
{
- if (pHdl!=nullptr)
- {
- aList.push_back(pHdl);
- pHdl->SetHdlList(this);
- }
+ assert(pHdl);
+ aList.push_back(pHdl);
+ pHdl->SetHdlList(this);
}
SdrHdl* SdrHdlList::IsHdlListHit(const Point& rPnt) const
@@ -2285,6 +2283,12 @@ SdrHdl* SdrHdlList::GetHdl(SdrHdlKind eKind1) const
return pRet;
}
+void SdrHdlList::MoveTo(SdrHdlList& rOther)
+{
+ rOther.aList.insert(rOther.aList.end(), aList.begin(), aList.end());
+ aList.clear();
+}
+
SdrCropHdl::SdrCropHdl(
const Point& rPnt,
SdrHdlKind eNewKind,
diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx
index 476d4de45a5c..c94432421aa0 100644
--- a/svx/source/svdraw/svdoashp.cxx
+++ b/svx/source/svdraw/svdoashp.cxx
@@ -1801,43 +1801,34 @@ SdrGluePointList* SdrObjCustomShape::ForceGluePointList()
sal_uInt32 SdrObjCustomShape::GetHdlCount() const
{
const sal_uInt32 nBasicHdlCount(SdrTextObj::GetHdlCount());
- std::vector< SdrCustomShapeInteraction > aInteractionHandles( GetInteractionHandles() );
- return ( aInteractionHandles.size() + nBasicHdlCount );
+ return ( GetInteractionHandles().size() + nBasicHdlCount );
}
-SdrHdl* SdrObjCustomShape::GetHdl( sal_uInt32 nHdlNum ) const
+void SdrObjCustomShape::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pH = nullptr;
- const sal_uInt32 nBasicHdlCount(SdrTextObj::GetHdlCount());
+ SdrTextObj::AddToHdlList(rHdlList);
- if ( nHdlNum < nBasicHdlCount )
- pH = SdrTextObj::GetHdl( nHdlNum );
- else
+ int nCustomShapeHdlNum = 0;
+ for (SdrCustomShapeInteraction const & rInteraction : GetInteractionHandles())
{
- std::vector< SdrCustomShapeInteraction > aInteractionHandles( GetInteractionHandles() );
- const sal_uInt32 nCustomShapeHdlNum(nHdlNum - nBasicHdlCount);
-
- if ( nCustomShapeHdlNum < aInteractionHandles.size() )
+ if ( rInteraction.xInteraction.is() )
{
- if ( aInteractionHandles[ nCustomShapeHdlNum ].xInteraction.is() )
+ try
+ {
+ css::awt::Point aPosition( rInteraction.xInteraction->getPosition() );
+ SdrHdl* pH = new SdrHdl( Point( aPosition.X, aPosition.Y ), SdrHdlKind::CustomShape1 );
+ pH->SetPointNum( nCustomShapeHdlNum );
+ pH->SetObj( const_cast<SdrObjCustomShape*>(this) );
+ rHdlList.AddHdl(pH);
+ }
+ catch ( const uno::RuntimeException& )
{
- try
- {
- css::awt::Point aPosition( aInteractionHandles[ nCustomShapeHdlNum ].xInteraction->getPosition() );
- pH = new SdrHdl( Point( aPosition.X, aPosition.Y ), SdrHdlKind::CustomShape1 );
- pH->SetPointNum( nCustomShapeHdlNum );
- pH->SetObj( const_cast<SdrObjCustomShape*>(this) );
- }
- catch ( const uno::RuntimeException& )
- {
- }
}
}
+ ++nCustomShapeHdlNum;
}
- return pH;
}
-
bool SdrObjCustomShape::hasSpecialDrag() const
{
return true;
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 5a705b998c77..9e37ca84c16c 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -1174,21 +1174,24 @@ sal_uInt32 SdrObject::GetHdlCount() const
return 8L;
}
-SdrHdl* SdrObject::GetHdl(sal_uInt32 nHdlNum) const
+void SdrObject::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pH=nullptr;
const tools::Rectangle& rR=GetSnapRect();
- switch (nHdlNum) {
- case 0: pH=new SdrHdl(rR.TopLeft(), SdrHdlKind::UpperLeft); break;
- case 1: pH=new SdrHdl(rR.TopCenter(), SdrHdlKind::Upper); break;
- case 2: pH=new SdrHdl(rR.TopRight(), SdrHdlKind::UpperRight); break;
- case 3: pH=new SdrHdl(rR.LeftCenter(), SdrHdlKind::Left ); break;
- case 4: pH=new SdrHdl(rR.RightCenter(), SdrHdlKind::Right); break;
- case 5: pH=new SdrHdl(rR.BottomLeft(), SdrHdlKind::LowerLeft); break;
- case 6: pH=new SdrHdl(rR.BottomCenter(),SdrHdlKind::Lower); break;
- case 7: pH=new SdrHdl(rR.BottomRight(), SdrHdlKind::LowerRight); break;
+ for (sal_uInt32 nHdlNum=0; nHdlNum<8; ++nHdlNum)
+ {
+ SdrHdl* pH=nullptr;
+ switch (nHdlNum) {
+ case 0: pH=new SdrHdl(rR.TopLeft(), SdrHdlKind::UpperLeft); break;
+ case 1: pH=new SdrHdl(rR.TopCenter(), SdrHdlKind::Upper); break;
+ case 2: pH=new SdrHdl(rR.TopRight(), SdrHdlKind::UpperRight); break;
+ case 3: pH=new SdrHdl(rR.LeftCenter(), SdrHdlKind::Left ); break;
+ case 4: pH=new SdrHdl(rR.RightCenter(), SdrHdlKind::Right); break;
+ case 5: pH=new SdrHdl(rR.BottomLeft(), SdrHdlKind::LowerLeft); break;
+ case 6: pH=new SdrHdl(rR.BottomCenter(),SdrHdlKind::Lower); break;
+ case 7: pH=new SdrHdl(rR.BottomRight(), SdrHdlKind::LowerRight); break;
+ }
+ rHdlList.AddHdl(pH);
}
- return pH;
}
sal_uInt32 SdrObject::GetPlusHdlCount(const SdrHdl& /*rHdl*/) const
@@ -1201,17 +1204,6 @@ SdrHdl* SdrObject::GetPlusHdl(const SdrHdl& /*rHdl*/, sal_uInt32 /*nPlNum*/) con
return nullptr;
}
-void SdrObject::AddToHdlList(SdrHdlList& rHdlList) const
-{
- sal_uInt32 nCount=GetHdlCount();
- for (sal_uInt32 i=0; i<nCount; i++) {
- SdrHdl* pHdl=GetHdl(i);
- if (pHdl!=nullptr) {
- rHdlList.AddHdl(pHdl);
- }
- }
-}
-
void SdrObject::addCropHandles(SdrHdlList& /*rTarget*/) const
{
// Default implementation, does nothing. Overloaded in
diff --git a/svx/source/svdraw/svdocapt.cxx b/svx/source/svdraw/svdocapt.cxx
index 7acb0bd4015c..4be0d6687a78 100644
--- a/svx/source/svdraw/svdocapt.cxx
+++ b/svx/source/svdraw/svdocapt.cxx
@@ -294,34 +294,21 @@ sal_uInt32 SdrCaptionObj::GetHdlCount() const
return nCount1 + 1;
}
-SdrHdl* SdrCaptionObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrCaptionObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- const sal_uInt32 nRectHdlCnt(SdrRectObj::GetHdlCount());
+ SdrRectObj::AddToHdlList(rHdlList);
+ const sal_uInt32 nRectHdlCnt(rHdlList.GetHdlCount());
- if(nHdlNum < nRectHdlCnt)
+ sal_uInt32 nCnt = aTailPoly.GetSize();
+ for(sal_uInt32 i = 0; i<nCnt; ++i)
{
- return SdrRectObj::GetHdl(nHdlNum);
- }
- else
- {
- sal_uInt32 nPntNum(nHdlNum);
- nPntNum -= nRectHdlCnt;
-
- if(nPntNum < aTailPoly.GetSize())
- {
- SdrHdl* pHdl = new SdrHdl(aTailPoly.GetPoint(static_cast<sal_uInt16>(nPntNum)), SdrHdlKind::Poly);
- pHdl->SetPolyNum(1);
- pHdl->SetPointNum(nPntNum);
- return pHdl;
- }
- else
- {
- return nullptr;
- }
+ SdrHdl* pHdl = new SdrHdl(aTailPoly.GetPoint(i), SdrHdlKind::Poly);
+ pHdl->SetPolyNum(1);
+ pHdl->SetPointNum(nRectHdlCnt + i);
+ rHdlList.AddHdl(pHdl);
}
}
-
bool SdrCaptionObj::hasSpecialDrag() const
{
return true;
diff --git a/svx/source/svdraw/svdocirc.cxx b/svx/source/svdraw/svdocirc.cxx
index 5f80317af1f1..10272e0fec67 100644
--- a/svx/source/svdraw/svdocirc.cxx
+++ b/svx/source/svdraw/svdocirc.cxx
@@ -406,83 +406,81 @@ sal_uInt32 SdrCircObj::GetHdlCount() const
}
}
-SdrHdl* SdrCircObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrCircObj::AddToHdlList(SdrHdlList& rHdlList) const
{
+ sal_uInt32 nHdlCnt = 8;
if (meCircleKind==OBJ_CIRC)
- {
- nHdlNum += 2;
- }
-
- SdrHdl* pH = nullptr;
- Point aPnt;
- SdrHdlKind eLocalKind(SdrHdlKind::Move);
- sal_uInt32 nPNum(0);
+ nHdlCnt += 2;
- switch (nHdlNum)
+ for (sal_uInt32 nHdlNum=0; nHdlNum<nHdlCnt; ++nHdlNum)
{
- case 0:
- aPnt = GetAnglePnt(maRect,nStartAngle);
- eLocalKind = SdrHdlKind::Circle;
- nPNum = 1;
- break;
- case 1:
- aPnt = GetAnglePnt(maRect,nEndAngle);
- eLocalKind = SdrHdlKind::Circle;
- nPNum = 2;
- break;
- case 2:
- aPnt = maRect.TopLeft();
- eLocalKind = SdrHdlKind::UpperLeft;
- break;
- case 3:
- aPnt = maRect.TopCenter();
- eLocalKind = SdrHdlKind::Upper;
- break;
- case 4:
- aPnt = maRect.TopRight();
- eLocalKind = SdrHdlKind::UpperRight;
- break;
- case 5:
- aPnt = maRect.LeftCenter();
- eLocalKind = SdrHdlKind::Left;
- break;
- case 6:
- aPnt = maRect.RightCenter();
- eLocalKind = SdrHdlKind::Right;
- break;
- case 7:
- aPnt = maRect.BottomLeft();
- eLocalKind = SdrHdlKind::LowerLeft;
- break;
- case 8:
- aPnt = maRect.BottomCenter();
- eLocalKind = SdrHdlKind::Lower;
- break;
- case 9:
- aPnt = maRect.BottomRight();
- eLocalKind = SdrHdlKind::LowerRight;
- break;
- }
+ SdrHdl* pH = nullptr;
+ Point aPnt;
+ SdrHdlKind eLocalKind(SdrHdlKind::Move);
+ sal_uInt32 nPNum(0);
- if (aGeo.nShearAngle)
- {
- ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
- }
+ switch (nHdlNum)
+ {
+ case 0:
+ aPnt = GetAnglePnt(maRect,nStartAngle);
+ eLocalKind = SdrHdlKind::Circle;
+ nPNum = 1;
+ break;
+ case 1:
+ aPnt = GetAnglePnt(maRect,nEndAngle);
+ eLocalKind = SdrHdlKind::Circle;
+ nPNum = 2;
+ break;
+ case 2:
+ aPnt = maRect.TopLeft();
+ eLocalKind = SdrHdlKind::UpperLeft;
+ break;
+ case 3:
+ aPnt = maRect.TopCenter();
+ eLocalKind = SdrHdlKind::Upper;
+ break;
+ case 4:
+ aPnt = maRect.TopRight();
+ eLocalKind = SdrHdlKind::UpperRight;
+ break;
+ case 5:
+ aPnt = maRect.LeftCenter();
+ eLocalKind = SdrHdlKind::Left;
+ break;
+ case 6:
+ aPnt = maRect.RightCenter();
+ eLocalKind = SdrHdlKind::Right;
+ break;
+ case 7:
+ aPnt = maRect.BottomLeft();
+ eLocalKind = SdrHdlKind::LowerLeft;
+ break;
+ case 8:
+ aPnt = maRect.BottomCenter();
+ eLocalKind = SdrHdlKind::Lower;
+ break;
+ case 9:
+ aPnt = maRect.BottomRight();
+ eLocalKind = SdrHdlKind::LowerRight;
+ break;
+ }
- if (aGeo.nRotationAngle)
- {
- RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
- }
+ if (aGeo.nShearAngle)
+ {
+ ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
+ }
+
+ if (aGeo.nRotationAngle)
+ {
+ RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
+ }
- if (eLocalKind != SdrHdlKind::Move)
- {
pH = new SdrHdl(aPnt,eLocalKind);
pH->SetPointNum(nPNum);
pH->SetObj(const_cast<SdrCircObj*>(this));
pH->SetRotationAngle(aGeo.nRotationAngle);
+ rHdlList.AddHdl(pH);
}
-
- return pH;
}
diff --git a/svx/source/svdraw/svdoedge.cxx b/svx/source/svdraw/svdoedge.cxx
index 605ed189ae55..8c9ef410a446 100644
--- a/svx/source/svdraw/svdoedge.cxx
+++ b/svx/source/svdraw/svdoedge.cxx
@@ -1747,13 +1747,12 @@ sal_uInt32 SdrEdgeObj::GetHdlCount() const
if(nPointCount)
{
nHdlCnt = 2;
-
if ((eKind==SdrEdgeKind::OrthoLines || eKind==SdrEdgeKind::Bezier) && nPointCount >= 4)
{
- sal_uInt32 nO1(aEdgeInfo.nObj1Lines > 0 ? aEdgeInfo.nObj1Lines - 1 : 0);
- sal_uInt32 nO2(aEdgeInfo.nObj2Lines > 0 ? aEdgeInfo.nObj2Lines - 1 : 0);
- sal_uInt32 nM(aEdgeInfo.nMiddleLine != 0xFFFF ? 1 : 0);
- nHdlCnt += nO1 + nO2 + nM;
+ sal_uInt32 nO1(aEdgeInfo.nObj1Lines > 0 ? aEdgeInfo.nObj1Lines - 1 : 0);
+ sal_uInt32 nO2(aEdgeInfo.nObj2Lines > 0 ? aEdgeInfo.nObj2Lines - 1 : 0);
+ sal_uInt32 nM(aEdgeInfo.nMiddleLine != 0xFFFF ? 1 : 0);
+ nHdlCnt += nO1 + nO2 + nM;
}
else if (eKind==SdrEdgeKind::ThreeLines && nPointCount == 4)
{
@@ -1768,41 +1767,50 @@ sal_uInt32 SdrEdgeObj::GetHdlCount() const
return nHdlCnt;
}
-SdrHdl* SdrEdgeObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrEdgeObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pHdl=nullptr;
sal_uInt32 nPointCount(pEdgeTrack->GetPointCount());
- if (nPointCount!=0) {
- if (nHdlNum==0) {
- pHdl=new ImpEdgeHdl((*pEdgeTrack)[0],SdrHdlKind::Poly);
- if (aCon1.pObj!=nullptr && aCon1.bBestVertex) pHdl->Set1PixMore();
- } else if (nHdlNum==1) {
- pHdl=new ImpEdgeHdl((*pEdgeTrack)[sal_uInt16(nPointCount-1)],SdrHdlKind::Poly);
- if (aCon2.pObj!=nullptr && aCon2.bBestVertex) pHdl->Set1PixMore();
- } else {
- SdrEdgeKind eKind=GetObjectItem(SDRATTR_EDGEKIND).GetValue();
- if (eKind==SdrEdgeKind::OrthoLines || eKind==SdrEdgeKind::Bezier) {
- sal_uInt32 nO1(aEdgeInfo.nObj1Lines > 0 ? aEdgeInfo.nObj1Lines - 1 : 0);
- sal_uInt32 nO2(aEdgeInfo.nObj2Lines > 0 ? aEdgeInfo.nObj2Lines - 1 : 0);
- sal_uInt32 nM(aEdgeInfo.nMiddleLine != 0xFFFF ? 1 : 0);
- sal_uInt32 nNum(nHdlNum - 2);
+ if (nPointCount==0)
+ return;
+
+ {
+ SdrHdl* pHdl=new ImpEdgeHdl((*pEdgeTrack)[0],SdrHdlKind::Poly);
+ if (aCon1.pObj!=nullptr && aCon1.bBestVertex) pHdl->Set1PixMore();
+ pHdl->SetPointNum(0);
+ rHdlList.AddHdl(pHdl);
+ }
+ {
+ SdrHdl* pHdl=new ImpEdgeHdl((*pEdgeTrack)[sal_uInt16(nPointCount-1)],SdrHdlKind::Poly);
+ if (aCon2.pObj!=nullptr && aCon2.bBestVertex) pHdl->Set1PixMore();
+ pHdl->SetPointNum(1);
+ rHdlList.AddHdl(pHdl);
+ }
+ {
+ SdrEdgeKind eKind=GetObjectItem(SDRATTR_EDGEKIND).GetValue();
+ if ((eKind==SdrEdgeKind::OrthoLines || eKind==SdrEdgeKind::Bezier) && nPointCount >= 4)
+ {
+ sal_uInt32 nO1(aEdgeInfo.nObj1Lines > 0 ? aEdgeInfo.nObj1Lines - 1 : 0);
+ sal_uInt32 nO2(aEdgeInfo.nObj2Lines > 0 ? aEdgeInfo.nObj2Lines - 1 : 0);
+ sal_uInt32 nM(aEdgeInfo.nMiddleLine != 0xFFFF ? 1 : 0);
+ for(sal_uInt32 nNum = 0; nNum < (nO1 + nO2 + nM); ++nNum)
+ {
sal_Int32 nPt(0);
- pHdl=new ImpEdgeHdl(Point(),SdrHdlKind::Poly);
+ ImpEdgeHdl* pHdl=new ImpEdgeHdl(Point(),SdrHdlKind::Poly);
if (nNum<nO1) {
nPt=nNum+1;
- if (nNum==0) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj1Line2);
- if (nNum==1) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj1Line3);
+ if (nNum==0) pHdl->SetLineCode(SdrEdgeLineCode::Obj1Line2);
+ if (nNum==1) pHdl->SetLineCode(SdrEdgeLineCode::Obj1Line3);
} else {
nNum=nNum-nO1;
if (nNum<nO2) {
nPt=nPointCount-3-nNum;
- if (nNum==0) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj2Line2);
- if (nNum==1) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj2Line3);
+ if (nNum==0) pHdl->SetLineCode(SdrEdgeLineCode::Obj2Line2);
+ if (nNum==1) pHdl->SetLineCode(SdrEdgeLineCode::Obj2Line3);
} else {
nNum=nNum-nO2;
if (nNum<nM) {
nPt=aEdgeInfo.nMiddleLine;
- static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::MiddleLine);
+ pHdl->SetLineCode(SdrEdgeLineCode::MiddleLine);
}
}
}
@@ -1812,27 +1820,36 @@ SdrHdl* SdrEdgeObj::GetHdl(sal_uInt32 nHdlNum) const
aPos.setX( aPos.X() / 2 );
aPos.setY( aPos.Y() / 2 );
pHdl->SetPos(aPos);
+ pHdl->SetPointNum(nNum + 2);
+ rHdlList.AddHdl(pHdl);
} else {
delete pHdl;
pHdl=nullptr;
}
- } else if (eKind==SdrEdgeKind::ThreeLines) {
- sal_uInt32 nNum(nHdlNum);
- if (GetConnectedNode(true)==nullptr) nNum++;
- Point aPos((*pEdgeTrack)[static_cast<sal_uInt16>(nNum)-1]);
- pHdl=new ImpEdgeHdl(aPos,SdrHdlKind::Poly);
- if (nNum==2) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj1Line2);
- if (nNum==3) static_cast<ImpEdgeHdl*>(pHdl)->SetLineCode(SdrEdgeLineCode::Obj2Line2);
}
}
- if (pHdl!=nullptr) {
- pHdl->SetPointNum(nHdlNum);
+ else if (eKind==SdrEdgeKind::ThreeLines && nPointCount == 4)
+ {
+ if(GetConnectedNode(true))
+ {
+ Point aPos((*pEdgeTrack)[1]);
+ ImpEdgeHdl* pHdl=new ImpEdgeHdl(aPos,SdrHdlKind::Poly);
+ pHdl->SetLineCode(SdrEdgeLineCode::Obj1Line2);
+ pHdl->SetPointNum(2);
+ rHdlList.AddHdl(pHdl);
+ }
+ if(GetConnectedNode(false))
+ {
+ Point aPos((*pEdgeTrack)[2]);
+ ImpEdgeHdl* pHdl=new ImpEdgeHdl(aPos,SdrHdlKind::Poly);
+ pHdl->SetLineCode(SdrEdgeLineCode::Obj2Line2);
+ pHdl->SetPointNum(3);
+ rHdlList.AddHdl(pHdl);
+ }
}
}
- return pHdl;
}
-
bool SdrEdgeObj::hasSpecialDrag() const
{
return true;
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 2a6463d49d55..27b1e4d5eeb4 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -751,9 +751,12 @@ sal_uInt32 SdrGrafObj::GetHdlCount() const
return 8L;
}
-SdrHdl* SdrGrafObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrGrafObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- return SdrRectObj::GetHdl( nHdlNum + 1 );
+ SdrHdlList tempList(nullptr);
+ SdrRectObj::AddToHdlList( tempList );
+ tempList.RemoveHdl(0);
+ tempList.MoveTo(rHdlList);
}
void SdrGrafObj::NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact)
diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx
index c7add749df64..70b4a9f00169 100644
--- a/svx/source/svdraw/svdomeas.cxx
+++ b/svx/source/svdraw/svdomeas.cxx
@@ -751,27 +751,30 @@ sal_uInt32 SdrMeasureObj::GetHdlCount() const
return 6L;
}
-SdrHdl* SdrMeasureObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrMeasureObj::AddToHdlList(SdrHdlList& rHdlList) const
{
ImpMeasureRec aRec;
ImpMeasurePoly aMPol;
ImpTakeAttr(aRec);
aRec.nHelplineDist=0;
ImpCalcGeometrics(aRec,aMPol);
- Point aPt;
- switch (nHdlNum) {
- case 0: aPt=aMPol.aHelpline1.aP1; break;
- case 1: aPt=aMPol.aHelpline2.aP1; break;
- case 2: aPt=aPt1; break;
- case 3: aPt=aPt2; break;
- case 4: aPt=aMPol.aHelpline1.aP2; break;
- case 5: aPt=aMPol.aHelpline2.aP2; break;
- } // switch
- SdrHdl* pHdl=new ImpMeasureHdl(aPt,SdrHdlKind::User);
- pHdl->SetObjHdlNum(nHdlNum);
- pHdl->SetRotationAngle(aMPol.nLineAngle);
- return pHdl;
+ for (sal_uInt32 nHdlNum=0; nHdlNum<6; ++nHdlNum)
+ {
+ Point aPt;
+ switch (nHdlNum) {
+ case 0: aPt=aMPol.aHelpline1.aP1; break;
+ case 1: aPt=aMPol.aHelpline2.aP1; break;
+ case 2: aPt=aPt1; break;
+ case 3: aPt=aPt2; break;
+ case 4: aPt=aMPol.aHelpline1.aP2; break;
+ case 5: aPt=aMPol.aHelpline2.aP2; break;
+ } // switch
+ SdrHdl* pHdl=new ImpMeasureHdl(aPt,SdrHdlKind::User);
+ pHdl->SetObjHdlNum(nHdlNum);
+ pHdl->SetRotationAngle(aMPol.nLineAngle);
+ rHdlList.AddHdl(pHdl);
+ }
}
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index 3dd12b6341af..55a66abd85e5 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -1984,28 +1984,6 @@ sal_uInt32 SdrPathObj::GetHdlCount() const
return nRetval;
}
-SdrHdl* SdrPathObj::GetHdl(sal_uInt32 nHdlNum) const
-{
- // #i73248#
- // Warn the user that this is ineffective and show alternatives. Should not be used at all.
- OSL_FAIL("SdrPathObj::GetHdl(): ineffective, use AddToHdlList instead (!)");
-
- // to have an alternative, get single handle using the ineffective way
- SdrHdl* pRetval = nullptr;
- SdrHdlList aLocalList(nullptr);
- AddToHdlList(aLocalList);
- const sal_uInt32 nHdlCount(aLocalList.GetHdlCount());
-
- if(nHdlCount && nHdlNum < nHdlCount)
- {
- // remove and remember. The other created handles will be deleted again with the
- // destruction of the local list
- pRetval = aLocalList.RemoveHdl(nHdlNum);
- }
-
- return pRetval;
-}
-
void SdrPathObj::AddToHdlList(SdrHdlList& rHdlList) const
{
// keep old stuff to be able to keep old SdrHdl stuff, too
diff --git a/svx/source/svdraw/svdorect.cxx b/svx/source/svdraw/svdorect.cxx
index c961d04dc080..fe727ae9b52b 100644
--- a/svx/source/svdraw/svdorect.cxx
+++ b/svx/source/svdraw/svdorect.cxx
@@ -310,71 +310,68 @@ sal_uInt32 SdrRectObj::GetHdlCount() const
return IsTextFrame() ? 10 : 9;
}
-SdrHdl* SdrRectObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrRectObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pH = nullptr;
- Point aPnt;
- SdrHdlKind eKind = SdrHdlKind::Move;
-
- if(!IsTextFrame())
+ sal_Int32 nCount = IsTextFrame() ? 10 : 9;
+ for(sal_Int32 nHdlNum = 0; nHdlNum < nCount; ++nHdlNum)
{
- nHdlNum++;
- }
+ SdrHdl* pH = nullptr;
+ Point aPnt;
+ SdrHdlKind eKind = SdrHdlKind::Move;
- switch(nHdlNum)
- {
- case 0:
- {
- OSL_ENSURE(!IsTextEditActive(), "Do not use a ImpTextframeHdl for highlighting text in active text edit, this will collide with EditEngine paints (!)");
- // hack for calc grid sync to ensure the hatched area
- // for a textbox is displayed at correct position
- pH = new ImpTextframeHdl(maRect + GetGridOffset() );
- pH->SetObj(const_cast<SdrRectObj*>(this));
- pH->SetRotationAngle(aGeo.nRotationAngle);
- break;
- }
- case 1:
+ switch(nHdlNum)
{
- long a = GetEckenradius();
- long b = std::max(maRect.GetWidth(),maRect.GetHeight())/2; // rounded up, because GetWidth() adds 1
- if (a>b) a=b;
- if (a<0) a=0;
- aPnt=maRect.TopLeft();
- aPnt.AdjustX(a );
- eKind = SdrHdlKind::Circle;
- break;
+ case 0:
+ {
+ OSL_ENSURE(!IsTextEditActive(), "Do not use a ImpTextframeHdl for highlighting text in active text edit, this will collide with EditEngine paints (!)");
+ // hack for calc grid sync to ensure the hatched area
+ // for a textbox is displayed at correct position
+ pH = new ImpTextframeHdl(maRect + GetGridOffset() );
+ pH->SetObj(const_cast<SdrRectObj*>(this));
+ pH->SetRotationAngle(aGeo.nRotationAngle);
+ break;
+ }
+ case 1:
+ {
+ long a = GetEckenradius();
+ long b = std::max(maRect.GetWidth(),maRect.GetHeight())/2; // rounded up, because GetWidth() adds 1
+ if (a>b) a=b;
+ if (a<0) a=0;
+ aPnt=maRect.TopLeft();
+ aPnt.AdjustX(a );
+ eKind = SdrHdlKind::Circle;
+ break;
+ }
+ case 2: aPnt=maRect.TopLeft(); eKind = SdrHdlKind::UpperLeft; break;
+ case 3: aPnt=maRect.TopCenter(); eKind = SdrHdlKind::Upper; break;
+ case 4: aPnt=maRect.TopRight(); eKind = SdrHdlKind::UpperRight; break;
+ case 5: aPnt=maRect.LeftCenter(); eKind = SdrHdlKind::Left ; break;
+ case 6: aPnt=maRect.RightCenter(); eKind = SdrHdlKind::Right; break;
+ case 7: aPnt=maRect.BottomLeft(); eKind = SdrHdlKind::LowerLeft; break;
+ case 8: aPnt=maRect.BottomCenter(); eKind = SdrHdlKind::Lower; break;
+ case 9: aPnt=maRect.BottomRight(); eKind = SdrHdlKind::LowerRight; break;
}
- case 2: aPnt=maRect.TopLeft(); eKind = SdrHdlKind::UpperLeft; break;
- case 3: aPnt=maRect.TopCenter(); eKind = SdrHdlKind::Upper; break;
- case 4: aPnt=maRect.TopRight(); eKind = SdrHdlKind::UpperRight; break;
- case 5: aPnt=maRect.LeftCenter(); eKind = SdrHdlKind::Left ; break;
- case 6: aPnt=maRect.RightCenter(); eKind = SdrHdlKind::Right; break;
- case 7: aPnt=maRect.BottomLeft(); eKind = SdrHdlKind::LowerLeft; break;
- case 8: aPnt=maRect.BottomCenter(); eKind = SdrHdlKind::Lower; break;
- case 9: aPnt=maRect.BottomRight(); eKind = SdrHdlKind::LowerRight; break;
- }
- if(!pH)
- {
- if(aGeo.nShearAngle)
+ if(!pH)
{
- ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
- }
+ if(aGeo.nShearAngle)
+ {
+ ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
+ }
- if(aGeo.nRotationAngle)
- {
- RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
- }
+ if(aGeo.nRotationAngle)
+ {
+ RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
+ }
- pH = new SdrHdl(aPnt,eKind);
- pH->SetObj(const_cast<SdrRectObj*>(this));
- pH->SetRotationAngle(aGeo.nRotationAngle);
+ pH = new SdrHdl(aPnt,eKind);
+ pH->SetObj(const_cast<SdrRectObj*>(this));
+ pH->SetRotationAngle(aGeo.nRotationAngle);
+ }
+ rHdlList.AddHdl(pH);
}
-
- return pH;
}
-
bool SdrRectObj::hasSpecialDrag() const
{
return true;
diff --git a/svx/source/svdraw/svdotxdr.cxx b/svx/source/svdraw/svdotxdr.cxx
index 635d002b42e9..5ce1e60583d2 100644
--- a/svx/source/svdraw/svdotxdr.cxx
+++ b/svx/source/svdraw/svdotxdr.cxx
@@ -36,29 +36,30 @@ sal_uInt32 SdrTextObj::GetHdlCount() const
return 8L;
}
-SdrHdl* SdrTextObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrTextObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pH=nullptr;
- Point aPnt;
- SdrHdlKind eKind=SdrHdlKind::Move;
- switch (nHdlNum) {
- case 0: aPnt=maRect.TopLeft(); eKind=SdrHdlKind::UpperLeft; break;
- case 1: aPnt=maRect.TopCenter(); eKind=SdrHdlKind::Upper; break;
- case 2: aPnt=maRect.TopRight(); eKind=SdrHdlKind::UpperRight; break;
- case 3: aPnt=maRect.LeftCenter(); eKind=SdrHdlKind::Left ; break;
- case 4: aPnt=maRect.RightCenter(); eKind=SdrHdlKind::Right; break;
- case 5: aPnt=maRect.BottomLeft(); eKind=SdrHdlKind::LowerLeft; break;
- case 6: aPnt=maRect.BottomCenter(); eKind=SdrHdlKind::Lower; break;
- case 7: aPnt=maRect.BottomRight(); eKind=SdrHdlKind::LowerRight; break;
- }
- if (aGeo.nShearAngle!=0) ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
- if (aGeo.nRotationAngle!=0) RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
- if (eKind!=SdrHdlKind::Move) {
+ for(sal_uInt32 nHdlNum=0; nHdlNum<8; ++nHdlNum)
+ {
+ SdrHdl* pH=nullptr;
+ Point aPnt;
+ SdrHdlKind eKind = SdrHdlKind::UpperLeft;
+ switch (nHdlNum) {
+ case 0: aPnt=maRect.TopLeft(); eKind=SdrHdlKind::UpperLeft; break;
+ case 1: aPnt=maRect.TopCenter(); eKind=SdrHdlKind::Upper; break;
+ case 2: aPnt=maRect.TopRight(); eKind=SdrHdlKind::UpperRight; break;
+ case 3: aPnt=maRect.LeftCenter(); eKind=SdrHdlKind::Left ; break;
+ case 4: aPnt=maRect.RightCenter(); eKind=SdrHdlKind::Right; break;
+ case 5: aPnt=maRect.BottomLeft(); eKind=SdrHdlKind::LowerLeft; break;
+ case 6: aPnt=maRect.BottomCenter(); eKind=SdrHdlKind::Lower; break;
+ case 7: aPnt=maRect.BottomRight(); eKind=SdrHdlKind::LowerRight; break;
+ }
+ if (aGeo.nShearAngle!=0) ShearPoint(aPnt,maRect.TopLeft(),aGeo.nTan);
+ if (aGeo.nRotationAngle!=0) RotatePoint(aPnt,maRect.TopLeft(),aGeo.nSin,aGeo.nCos);
pH=new SdrHdl(aPnt,eKind);
pH->SetObj(const_cast<SdrTextObj*>(this));
pH->SetRotationAngle(aGeo.nRotationAngle);
+ rHdlList.AddHdl(pH);
}
- return pH;
}
diff --git a/svx/source/svdraw/svdovirt.cxx b/svx/source/svdraw/svdovirt.cxx
index 698ac2051adc..b625ae9fcf3d 100644
--- a/svx/source/svdraw/svdovirt.cxx
+++ b/svx/source/svdraw/svdovirt.cxx
@@ -199,19 +199,17 @@ sal_uInt32 SdrVirtObj::GetHdlCount() const
return rRefObj.GetHdlCount();
}
-SdrHdl* SdrVirtObj::GetHdl(sal_uInt32 nHdlNum) const
+void SdrVirtObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pHdl=rRefObj.GetHdl(nHdlNum);
-
- // #i73248#
- // GetHdl() at SdrObject is not guaranteed to return an object
- if(pHdl)
+ SdrHdlList tempList(nullptr);
+ rRefObj.AddToHdlList(tempList);
+ for (size_t i=0; i<tempList.GetHdlCount(); ++i)
{
+ SdrHdl* pHdl = tempList.GetHdl(i);
Point aP(pHdl->GetPos()+aAnchor);
pHdl->SetPos(aP);
}
-
- return pHdl;
+ tempList.MoveTo(rHdlList);
}
sal_uInt32 SdrVirtObj::GetPlusHdlCount(const SdrHdl& rHdl) const
@@ -226,43 +224,6 @@ SdrHdl* SdrVirtObj::GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const
return pHdl;
}
-void SdrVirtObj::AddToHdlList(SdrHdlList& rHdlList) const
-{
- // #i73248#
- // SdrObject::AddToHdlList(rHdlList) is not a good thing to call
- // since at SdrPathObj, only AddToHdlList may be used and the call
- // will instead use the standard implementation which uses GetHdlCount()
- // and GetHdl instead. This is not wrong, but may be much less effective
- // and may not be prepared to GetHdl returning NULL
-
- // get handles using AddToHdlList from ref object
- SdrHdlList aLocalList(nullptr);
- rRefObj.AddToHdlList(aLocalList);
- const size_t nHdlCount(aLocalList.GetHdlCount());
-
- if(nHdlCount)
- {
- // translate handles and add them to dest list. They are temporarily part of
- // two lists then
- const Point aOffset(GetOffset());
-
- for(size_t a = 0; a < nHdlCount; ++a)
- {
- SdrHdl* pCandidate = aLocalList.GetHdl(a);
- pCandidate->SetPos(pCandidate->GetPos() + aOffset);
- rHdlList.AddHdl(pCandidate);
- }
-
- // remove them from source list, else they will be deleted when
- // source list is deleted
- while(aLocalList.GetHdlCount())
- {
- aLocalList.RemoveHdl(aLocalList.GetHdlCount() - 1);
- }
- }
-}
-
-
bool SdrVirtObj::hasSpecialDrag() const
{
return rRefObj.hasSpecialDrag();
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index 53eaffa65d7e..b09160a0b36c 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -2187,29 +2187,6 @@ void SdrTableObj::AddToHdlList(SdrHdlList& rHdlList) const
rHdlList.GetHdl(nHdl)->SetObj(const_cast<SdrTableObj*>(this));
}
-SdrHdl* SdrTableObj::GetHdl(sal_uInt32 nHdlNum) const
-{
- // #i73248#
- // Warn the user that this is ineffective and show alternatives. Should not be used at all.
- OSL_FAIL("SdrTableObj::GetHdl(): ineffective, use AddToHdlList instead (!)");
-
- // to have an alternative, get single handle using the ineffective way
- SdrHdl* pRetval = nullptr;
- SdrHdlList aLocalList(nullptr);
- AddToHdlList(aLocalList);
- const size_t nHdlCount(aLocalList.GetHdlCount());
-
- if(nHdlCount && static_cast<size_t>(nHdlNum) < nHdlCount)
- {
- // remove and remember. The other created handles will be deleted again with the
- // destruction of the local list
- pRetval = aLocalList.RemoveHdl(nHdlNum);
- }
-
- return pRetval;
-}
-
-
// Dragging
bool SdrTableObj::hasSpecialDrag() const
diff --git a/sw/inc/dcontact.hxx b/sw/inc/dcontact.hxx
index ea0261cde391..4d3a48fd14d0 100644
--- a/sw/inc/dcontact.hxx
+++ b/sw/inc/dcontact.hxx
@@ -263,7 +263,7 @@ class SwDrawVirtObj : public SdrVirtObj
virtual void RecalcBoundRect() override;
virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual ::basegfx::B2DPolyPolygon TakeContour() const override;
- virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
virtual void NbcMove(const Size& rSiz) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcRotate(const Point& rRef, long nAngle, double sn, double cs) override;
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index 286b6ddd721c..df8958a9eaab 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -412,10 +412,12 @@ void SwTiledRenderingTest::testSetGraphicSelection()
SdrPage* pPage = pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
SdrObject* pObject = pPage->GetObj(0);
pWrtShell->SelectObj(Point(), 0, pObject);
+ SdrHdlList handleList(nullptr);
+ pObject->AddToHdlList(handleList);
// Make sure the rectangle has 8 handles: at each corner and at the center of each edge.
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(8), pObject->GetHdlCount());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(8), handleList.GetHdlCount());
// Take the bottom center one.
- SdrHdl* pHdl = pObject->GetHdl(6);
+ SdrHdl* pHdl = handleList.GetHdl(6);
CPPUNIT_ASSERT_EQUAL(int(SdrHdlKind::Lower), static_cast<int>(pHdl->GetKind()));
tools::Rectangle aShapeBefore = pObject->GetSnapRect();
// Resize.
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index c3bb4ae61025..2f5da1bb4e36 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -2339,21 +2339,19 @@ basegfx::B2DPolyPolygon SwDrawVirtObj::TakeContour() const
return aRetval;
}
-SdrHdl* SwDrawVirtObj::GetHdl(sal_uInt32 nHdlNum) const
+void SwDrawVirtObj::AddToHdlList(SdrHdlList& rHdlList) const
{
- SdrHdl* pHdl = rRefObj.GetHdl(nHdlNum);
+ SdrHdlList tmpList(nullptr);
+ rRefObj.AddToHdlList(tmpList);
- if(pHdl)
+ size_t cnt = tmpList.GetHdlCount();
+ for(size_t i=0; i < cnt; ++i)
{
+ SdrHdl* pHdl = tmpList.GetHdl(i);
Point aP(pHdl->GetPos() + GetOffset());
pHdl->SetPos(aP);
}
- else
- {
- OSL_ENSURE(false, "Got no SdrHdl(!)");
- }
-
- return pHdl;
+ tmpList.MoveTo(rHdlList);
}
void SwDrawVirtObj::NbcMove(const Size& rSiz)
More information about the Libreoffice-commits
mailing list