From ddcbbf771fb6e9acc9f470723bded5c6e2653c4f Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Thu, 13 Feb 2025 15:47:39 +0100 Subject: [PATCH] wg_engine: handle properly odd numbers of dashes/gaps If the provided list has an odd number of values, then it should be repeated to yield an even number of values. @Issue: https://github.com/thorvg/thorvg/issues/3205 --- src/renderer/wg_engine/tvgWgGeometry.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/renderer/wg_engine/tvgWgGeometry.h b/src/renderer/wg_engine/tvgWgGeometry.h index 6de3bfc6..ce6156f4 100755 --- a/src/renderer/wg_engine/tvgWgGeometry.h +++ b/src/renderer/wg_engine/tvgWgGeometry.h @@ -309,10 +309,10 @@ struct WgVertexBufferInd } len_total -= dashOffset; // iterate by polyline points + auto gap = false; for (uint32_t i = 0; i < buff.vcount - 1; i++) { // append current polyline point - if (index_dash % 2 == 0) - dashed.append(buff.vbuff[i]); + if (!gap) dashed.append(buff.vbuff[i]); // move inside polyline segment while(len_total < buff.vdist[i+1]) { // get current point @@ -321,17 +321,18 @@ struct WgVertexBufferInd index_dash = (index_dash + 1) % dashCnt; len_total += dashPattern[index_dash]; // preceed stroke if dash - if (index_dash % 2 != 0) { + if (!gap) { dashed.updateDistances(); appendStrokes(dashed, rstroke); dashed.reset(tscale); } + gap = !gap; } // update current subline length len_total -= buff.vdist[i+1]; } // draw last subline - if (index_dash % 2 == 0) { + if (!gap) { dashed.append(buff.last()); dashed.updateDistances(); appendStrokes(dashed, rstroke);