From 82dc41479ead5ae2c919d586c9cfa1b6b0c84cd2 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Sun, 29 Dec 2024 22:34:41 +0100 Subject: [PATCH] sw_engine: fix clipping A shape with both fill and stroke, where clipping left only a fragment of one (either fill or stroke), was not rendered at all. Now fixed. --- src/renderer/sw_engine/tvgSwRenderer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/renderer/sw_engine/tvgSwRenderer.cpp b/src/renderer/sw_engine/tvgSwRenderer.cpp index 73ec94a9..a11ca570 100644 --- a/src/renderer/sw_engine/tvgSwRenderer.cpp +++ b/src/renderer/sw_engine/tvgSwRenderer.cpp @@ -172,8 +172,9 @@ struct SwShapeTask : SwTask //Clip Path for (auto clip = clips.begin(); clip < clips.end(); ++clip) { auto clipper = static_cast(*clip); - if (shape.rle && !clipper->clip(shape.rle)) goto err; //Clip shape rle - if (shape.strokeRle && !clipper->clip(shape.strokeRle)) goto err; //Clip stroke rle + auto clipShapeRle = shape.rle ? clipper->clip(shape.rle) : true; + auto clipStrokeRle = shape.strokeRle ? clipper->clip(shape.strokeRle) : true; + if (!clipShapeRle && !clipStrokeRle) goto err; } bbox = renderRegion; //sync