diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-11-07 10:34:51 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-11-07 11:23:51 +0100 |
commit | bdc97ababa5017422f5bcdb345969f6691fc818d (patch) | |
tree | ec437ad98b7f7ce2bfec6b190bee64cb338a91ba | |
parent | 3996a7fd31cd64169e34b7ddbeaffaa03c95bdd2 (diff) |
tdf120965 Phantom control point line in Bézier curve
regression from
commit f74b888244fcefa7c03fa25db4d42c839ebbf642
simplify PlusHdl logic
restore the structure of the original code here, which is completely
opaque to me
Change-Id: I7b9e5732bd7ed0a92627503ea3c7d2d320a8a33b
Reviewed-on: https://gerrit.libreoffice.org/62989
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | svx/source/svdraw/svdopath.cxx | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx index 0e56b63494e6..eda7c34db46a 100644 --- a/svx/source/svdraw/svdopath.cxx +++ b/svx/source/svdraw/svdopath.cxx @@ -2021,14 +2021,33 @@ void SdrPathObj::AddToPlusHdlList(SdrHdlList& rHdlList, SdrHdl& rHdl) const if (nPntMax<=0) return; - nPntMax--; - for (sal_uInt32 nPlusNum = 0; nPlusNum <= nPntMax; ++nPlusNum) + if (nPnt>nPntMax) + return; + + // calculate the number of plus points + sal_uInt16 nCnt = 0; + if (rXPoly.GetFlags(nPnt)!=PolyFlags::Control) + { + if (nPnt==0 && IsClosed()) + nPnt=nPntMax; + if (nPnt>0 && rXPoly.GetFlags(nPnt-1)==PolyFlags::Control) + nCnt++; + if (nPnt==nPntMax && IsClosed()) + nPnt=0; + if (nPnt<nPntMax && rXPoly.GetFlags(nPnt+1)==PolyFlags::Control) + nCnt++; + } + + // construct the plus points + for (sal_uInt32 nPlusNum = 0; nPlusNum < nCnt; ++nPlusNum) { + nPnt = static_cast<sal_uInt16>(rHdl.GetPointNum()); std::unique_ptr<SdrHdl> pHdl(new SdrHdlBezWgt(&rHdl)); pHdl->SetPolyNum(rHdl.GetPolyNum()); - if (nPnt==0 && IsClosed()) nPnt=nPntMax; + if (nPnt==0 && IsClosed()) + nPnt=nPntMax; if (nPnt>0 && rXPoly.GetFlags(nPnt-1)==PolyFlags::Control && nPlusNum==0) { pHdl->SetPos(rXPoly[nPnt-1]); @@ -2036,7 +2055,8 @@ void SdrPathObj::AddToPlusHdlList(SdrHdlList& rHdlList, SdrHdl& rHdl) const } else { - if (nPnt==nPntMax && IsClosed()) nPnt=0; + if (nPnt==nPntMax && IsClosed()) + nPnt=0; if (nPnt<rXPoly.GetPointCount()-1 && rXPoly.GetFlags(nPnt+1)==PolyFlags::Control) { pHdl->SetPos(rXPoly[nPnt+1]); |