summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-11-07 10:34:51 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-11-07 11:23:51 +0100
commitbdc97ababa5017422f5bcdb345969f6691fc818d (patch)
treeec437ad98b7f7ce2bfec6b190bee64cb338a91ba
parent3996a7fd31cd64169e34b7ddbeaffaa03c95bdd2 (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.cxx28
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]);