summaryrefslogtreecommitdiff
path: root/svgio/source/svgreader/svgstyleattributes.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svgio/source/svgreader/svgstyleattributes.cxx')
-rw-r--r--svgio/source/svgreader/svgstyleattributes.cxx22
1 files changed, 14 insertions, 8 deletions
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 5f3a3f4aea8a..d9a0bf3cef86 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1161,7 +1161,8 @@ namespace svgio::svgreader
void SvgStyleAttributes::add_postProcess(
drawinglayer::primitive2d::Primitive2DContainer& rTarget,
drawinglayer::primitive2d::Primitive2DContainer&& rSource,
- const std::optional<basegfx::B2DHomMatrix>& pTransform) const
+ const std::optional<basegfx::B2DHomMatrix>& pTransform,
+ bool bIsPrimitive) const
{
if(rSource.empty())
return;
@@ -1175,15 +1176,20 @@ namespace svgio::svgreader
drawinglayer::primitive2d::Primitive2DContainer aSource(std::move(rSource));
- if(basegfx::fTools::less(fOpacity, 1.0))
+ // tdf#97717: only apply opacity when it's a primitive, otherwise, it might be
+ // applied more than once, since getOpacity() checks the parents
+ if (bIsPrimitive)
{
- // embed in UnifiedTransparencePrimitive2D
- const drawinglayer::primitive2d::Primitive2DReference xRef(
- new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
- std::move(aSource),
- 1.0 - fOpacity));
+ if(basegfx::fTools::less(fOpacity, 1.0))
+ {
+ // embed in UnifiedTransparencePrimitive2D
+ const drawinglayer::primitive2d::Primitive2DReference xRef(
+ new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D(
+ std::move(aSource),
+ 1.0 - fOpacity));
- aSource = drawinglayer::primitive2d::Primitive2DContainer { xRef };
+ aSource = drawinglayer::primitive2d::Primitive2DContainer { xRef };
+ }
}
if(pTransform)