include/svx/svddrag.hxx | 53 ++++++++++++++++++++--------------------- svx/source/svdraw/svddrag.cxx | 37 ++++++++++------------------ svx/source/svdraw/svdocirc.cxx | 2 - svx/source/svdraw/svdopath.cxx | 4 +-- 4 files changed, 42 insertions(+), 54 deletions(-)
New commits: commit 030273e2e28ef9c4d2118ca3851c64498dfe000a Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Fri Sep 8 13:30:05 2017 +0200 clean up SdrDragStat - some light formatting in the header file - change aPnts from std::vector<Point*> to std::vector<Point>, no point in dynamically allocating a small value class - rename aPnts -> mvPnts - use std::unique_ptr for userdata - rename pUser to mpUserData - change some methods protected->private, since nothing external is using them Change-Id: I7a3f4c30c60ae1be3713f460fe65de95bed2f124 Reviewed-on: https://gerrit.libreoffice.org/42102 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/svx/svddrag.hxx b/include/svx/svddrag.hxx index 608d32bfdfbd..4766863a045d 100644 --- a/include/svx/svddrag.hxx +++ b/include/svx/svddrag.hxx @@ -25,6 +25,7 @@ #include <tools/fract.hxx> #include <svx/svxdllapi.h> +#include <memory> #include <vector> // Status information for specialized object dragging. In order for the model @@ -47,7 +48,7 @@ protected: SdrHdl* pHdl; // The Handle for the User SdrView* pView; SdrPageView* pPageView; - std::vector<Point*> aPnts; // All previous Points: [0]=Start, [Count()-2]=Prev + std::vector<Point> mvPnts; // All previous Points: [0]=Start, [Count()-2]=Prev Point aRef1; // Referencepoint: Resize fixed point, (axis of rotation, Point aRef2; // axis of reflection, ...) Point aPos0; // Position at the last Event @@ -72,26 +73,25 @@ protected: bool bOrtho8; SdrDragMethod* pDragMethod; + std::unique_ptr<SdrDragStatUserData> mpUserData; // Userdata -protected: void Clear(bool bLeaveOne); - Point& Pnt(sal_uIntPtr nNum) { return *aPnts[nNum]; } -//public: - SdrDragStatUserData* pUser; // Userdata +protected: + Point& Pnt(sal_uIntPtr nNum) { return mvPnts[nNum]; } public: - SdrDragStat(): aPnts() { pUser=nullptr; Reset(); } - ~SdrDragStat() { Clear(false); } + SdrDragStat() { Reset(); } + ~SdrDragStat(); void Reset(); SdrView* GetView() const { return pView; } void SetView(SdrView* pV) { pView=pV; } SdrPageView* GetPageView() const { return pPageView; } void SetPageView(SdrPageView* pPV) { pPageView=pPV; } - const Point& GetPoint(sal_uIntPtr nNum) const { return *aPnts[nNum]; } - sal_uIntPtr GetPointCount() const { return aPnts.size(); } + const Point& GetPoint(sal_uIntPtr nNum) const { return mvPnts[nNum]; } + sal_uIntPtr GetPointCount() const { return mvPnts.size(); } const Point& GetStart() const { return GetPoint(0); } Point& Start() { return Pnt(0); } const Point& GetPrev() const { return GetPoint(GetPointCount()-(GetPointCount()>=2 ? 2:1)); } - Point& Prev() { return Pnt(GetPointCount()-(GetPointCount()>=2 ? 2:1)); } + Point& Prev() { return Pnt(GetPointCount()-(GetPointCount()>=2 ? 2:1)); } const Point& GetPos0() const { return aPos0; } const Point& GetNow() const { return GetPoint(GetPointCount()-1); } Point& Now() { return Pnt(GetPointCount()-1); } @@ -103,8 +103,8 @@ public: Point& Ref2() { return aRef2; } const SdrHdl* GetHdl() const { return pHdl; } void SetHdl(SdrHdl* pH) { pHdl=pH; } - SdrDragStatUserData* GetUser() const { return pUser; } - void SetUser(SdrDragStatUserData* pU) { pUser=pU; } + SdrDragStatUserData* GetUser() const { return mpUserData.get(); } + void SetUser(std::unique_ptr<SdrDragStatUserData> pU) { mpUserData = std::move(pU); } bool IsShown() const { return bShown; } void SetShown(bool bOn) { bShown=bOn; } @@ -143,25 +143,24 @@ public: bool IsMouseDown() const { return !bMouseIsUp; } void SetMouseDown(bool bDown) { bMouseIsUp=!bDown; } - static Point KorregPos(const Point& rNow, const Point& rPrev); - void Reset(const Point& rPnt); - void NextMove(const Point& rPnt); - void NextPoint(); - void PrevPoint(); - bool CheckMinMoved(const Point& rPnt); - long GetDX() const { return GetNow().X()-GetPrev().X(); } - long GetDY() const { return GetNow().Y()-GetPrev().Y(); } - Fraction GetXFact() const; - Fraction GetYFact() const; + void Reset(const Point& rPnt); + void NextMove(const Point& rPnt); + void NextPoint(); + void PrevPoint(); + bool CheckMinMoved(const Point& rPnt); + long GetDX() const { return GetNow().X()-GetPrev().X(); } + long GetDY() const { return GetNow().Y()-GetPrev().Y(); } + Fraction GetXFact() const; + Fraction GetYFact() const; - SdrDragMethod* GetDragMethod() const { return pDragMethod; } - void SetDragMethod(SdrDragMethod* pMth) { pDragMethod=pMth; } + SdrDragMethod* GetDragMethod() const { return pDragMethod; } + void SetDragMethod(SdrDragMethod* pMth) { pDragMethod=pMth; } - const tools::Rectangle& GetActionRect() const { return aActionRect; } - void SetActionRect(const tools::Rectangle& rR) { aActionRect=rR; } + const tools::Rectangle& GetActionRect() const { return aActionRect; } + void SetActionRect(const tools::Rectangle& rR) { aActionRect=rR; } // Also considering 1stPointAsCenter - void TakeCreateRect(tools::Rectangle& rRect) const; + void TakeCreateRect(tools::Rectangle& rRect) const; }; #endif // INCLUDED_SVX_SVDDRAG_HXX diff --git a/svx/source/svdraw/svddrag.cxx b/svx/source/svdraw/svddrag.cxx index f9d943f009c5..76a7e59bceec 100644 --- a/svx/source/svdraw/svddrag.cxx +++ b/svx/source/svdraw/svddrag.cxx @@ -22,18 +22,16 @@ SdrDragStatUserData::~SdrDragStatUserData() = default; +SdrDragStat::~SdrDragStat() +{ +} + void SdrDragStat::Clear(bool bLeaveOne) { - while (!aPnts.empty()) { - delete aPnts.back(); - aPnts.pop_back(); - } - delete pUser; - pUser=nullptr; - aPnts.clear(); - if (bLeaveOne) { - aPnts.push_back(new Point); - } + mpUserData.reset(); + mvPnts.clear(); + if (bLeaveOne) + mvPnts.emplace_back(); } void SdrDragStat::Reset() @@ -70,33 +68,24 @@ void SdrDragStat::NextMove(const Point& rPnt) { aPos0=GetNow(); RealNow()=rPnt; - Point aBla=KorregPos(GetRealNow(),GetPrev()); - Now()=aBla; + Now()=GetRealNow(); } void SdrDragStat::NextPoint() { Point aPnt(GetNow()); - aPnts.push_back(new Point(KorregPos(GetRealNow(),aPnt))); + mvPnts.emplace_back(GetRealNow()); Prev()=aPnt; } void SdrDragStat::PrevPoint() { - if (aPnts.size()>=2) { // one has to remain at all times - Point* pPnt=aPnts[aPnts.size()-2]; - aPnts.erase(aPnts.begin()+aPnts.size()-2); - delete pPnt; - Now()=KorregPos(GetRealNow(),GetPrev()); + if (mvPnts.size()>=2) { // one has to remain at all times + mvPnts.erase(mvPnts.begin()+mvPnts.size()-2); + Now() = GetRealNow(); } } -Point SdrDragStat::KorregPos(const Point& rNow, const Point& /*rPrev*/) -{ - Point aRet(rNow); - return aRet; -} - bool SdrDragStat::CheckMinMoved(const Point& rPnt) { if (!bMinMoved) { diff --git a/svx/source/svdraw/svdocirc.cxx b/svx/source/svdraw/svdocirc.cxx index 3ea984b4b529..d20ea32e2c16 100644 --- a/svx/source/svdraw/svdocirc.cxx +++ b/svx/source/svdraw/svdocirc.cxx @@ -665,7 +665,7 @@ void SdrCircObj::ImpSetCreateParams(SdrDragStat& rStat) ImpCircUser* pU=static_cast<ImpCircUser*>(rStat.GetUser()); if (pU==nullptr) { pU=new ImpCircUser; - rStat.SetUser(pU); + rStat.SetUser(std::unique_ptr<ImpCircUser>(pU)); } pU->SetCreateParams(rStat); } diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx index b079c6ae3393..c364746e9e37 100644 --- a/svx/source/svdraw/svdopath.cxx +++ b/svx/source/svdraw/svdopath.cxx @@ -1269,10 +1269,10 @@ bool ImpPathForDragAndCreate::BegCreate(SdrDragStat& rStat) if (bMakeStartPoint) { aPathPolygon[0][1]=rStat.GetNow(); } - ImpPathCreateUser* pU=new ImpPathCreateUser; + std::unique_ptr<ImpPathCreateUser> pU(new ImpPathCreateUser); pU->eStartKind=meObjectKind; pU->eAktKind=meObjectKind; - rStat.SetUser(pU); + rStat.SetUser(std::move(pU)); return true; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits