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>
diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx
index 0e56b63..eda7c34 100644
--- a/svx/source/svdraw/svdopath.cxx
+++ b/svx/source/svdraw/svdopath.cxx
@@ -2021,14 +2021,33 @@
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 @@
}
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]);