lottie: add lineTo support in round corner alg

So far, there hasn't been a case where this support
was necessary, but it will be once chaining is added-
when the LottieRoundnessModifier::modifyPath() is
called by a previous modifier.
This commit is contained in:
Mira Grudzinska 2025-06-18 18:16:23 +02:00
parent 3426531dd2
commit a797516c70

View file

@ -208,7 +208,13 @@ bool LottieRoundnessModifier::modifyPath(PathCommand* inCmds, uint32_t inCmdsCnt
_roundCorner(path.cmds, path.pts, prev, curr, inPts[iPts + 5], r);
iPts += 3;
break;
} else if (inCmds[iCmds + 1] == PathCommand::Close) {
}
if (inCmds[iCmds + 1] == PathCommand::LineTo) {
_roundCorner(path.cmds, path.pts, prev, curr, inPts[iPts + 3], r);
iPts += 3;
break;
}
if (inCmds[iCmds + 1] == PathCommand::Close) {
_roundCorner(path.cmds, path.pts, prev, curr, inPts[2], r);
path.pts[startIndex] = path.pts.last();
iPts += 3;
@ -221,6 +227,31 @@ bool LottieRoundnessModifier::modifyPath(PathCommand* inCmds, uint32_t inCmdsCnt
path.pts.push(inPts[iPts++]);
break;
}
case PathCommand::LineTo: {
if (iCmds < inCmdsCnt - 1) {
auto& prev = inPts[iPts - 1];
auto& curr = inPts[iPts];
if (inCmds[iCmds + 1] == PathCommand::CubicTo && _colinear(inPts + iPts)) {
_roundCorner(path.cmds, path.pts, prev, curr, inPts[iPts + 3], r);
++iPts;
break;
}
if (inCmds[iCmds + 1] == PathCommand::LineTo) {
_roundCorner(path.cmds, path.pts, prev, curr, inPts[iPts + 1], r);
++iPts;
break;
}
if (inCmds[iCmds + 1] == PathCommand::Close) {
_roundCorner(path.cmds, path.pts, prev, curr, inPts[1], r);
path.pts[startIndex] = path.pts.last();
++iPts;
break;
}
}
path.cmds.push(PathCommand::LineTo);
path.pts.push(inPts[iPts++]);
break;
}
case PathCommand::Close: {
path.cmds.push(PathCommand::Close);
break;