mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-20 15:03:25 +00:00
lottie: enhance rounded corners modifier
Added support for LineTo path commands in the rounding corners modifier algorithm. This is necessary to allow other modifiers to be applied before rounding, as previously only CubicTo segments from the original lottie data were handled.
This commit is contained in:
parent
01313592d8
commit
0f9e10299e
1 changed files with 32 additions and 1 deletions
|
@ -205,7 +205,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;
|
||||
|
@ -218,6 +224,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;
|
||||
|
|
Loading…
Add table
Reference in a new issue