From 77114a8ac85dca4d955bdfbf6c603210d9435710 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Wed, 10 May 2023 17:47:00 +0200 Subject: [PATCH] tvg_saver: fixing unwanted merging Similar shapes are merged to improve performance. This should not be the case with a semi-transparent fill, different shapes' fill-rule or fill-rule set to evenodd. @Issue: https://github.com/thorvg/thorvg/issues/1440 --- src/savers/tvg/tvgTvgSaver.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/savers/tvg/tvgTvgSaver.cpp b/src/savers/tvg/tvgTvgSaver.cpp index 10985701..41185a00 100644 --- a/src/savers/tvg/tvgTvgSaver.cpp +++ b/src/savers/tvg/tvgTvgSaver.cpp @@ -75,7 +75,10 @@ static bool _merge(Shape* from, Shape* to) from->fillColor(&r, &g, &b, &a); to->fillColor(&r2, &g2, &b2, &a2); - if (r != r2 || g != g2 || b != b2 || a != a2) return false; + if (r != r2 || g != g2 || b != b2 || a != a2 || a < 255) return false; + + auto fromRule = from->fillRule(); + if (fromRule == FillRule::EvenOdd || fromRule != to->fillRule()) return false; //composition if (from->composite(nullptr) != CompositeMethod::None) return false;