From 0915ddbc5fe4a4fc6c57d7783ad249ac9b5e2ccc Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Tue, 7 Sep 2021 13:12:08 +0200 Subject: [PATCH] sw_engine: overlaping stroke cap A square or a round cap was mistakenly added to the parts of the dashed lines that should be continuous. Fixed @Issues: https://github.com/Samsung/thorvg/issues/777 --- src/lib/sw_engine/tvgSwShape.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/sw_engine/tvgSwShape.cpp b/src/lib/sw_engine/tvgSwShape.cpp index ecdaae1..08cd694 100644 --- a/src/lib/sw_engine/tvgSwShape.cpp +++ b/src/lib/sw_engine/tvgSwShape.cpp @@ -21,6 +21,7 @@ */ #include "tvgSwCommon.h" #include "tvgBezier.h" +#include /************************************************************************/ /* Internal Class Implementation */ @@ -234,11 +235,14 @@ static void _dashCubicTo(SwDashStroke& dash, const Point* ctrl1, const Point* ct Bezier left, right; len -= dash.curLen; bezSplitAt(cur, dash.curLen, left, right); - dash.curIdx = (dash.curIdx + 1) % dash.cnt; if (!dash.curOpGap) { - _outlineMoveTo(*dash.outline, &left.start, transform); + // leftovers from a previous command don't require moveTo + if (dash.pattern[dash.curIdx] - dash.curLen < FLT_EPSILON) { + _outlineMoveTo(*dash.outline, &left.start, transform); + } _outlineCubicTo(*dash.outline, &left.ctrl1, &left.ctrl2, &left.end, transform); } + dash.curIdx = (dash.curIdx + 1) % dash.cnt; dash.curLen = dash.pattern[dash.curIdx]; dash.curOpGap = !dash.curOpGap; cur = right; -- 2.7.4