drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx |   28 +++++++++++--
 1 file changed, 25 insertions(+), 3 deletions(-)

New commits:
commit 08ae179c76ba77c3c497782ab92d349a8c1140f4
Author:     Armin Le Grand (Collabora) <[email protected]>
AuthorDate: Thu Jun 19 17:23:10 2025 +0200
Commit:     Armin Le Grand <[email protected]>
CommitDate: Thu Jun 19 19:40:38 2025 +0200

    tdf#166709 better to use TransparencePrimitive2D for metafile
    
    See comments in code & task.
    
    Change-Id: I6c34a86ab713130b427fd5efad83b7028a32bc19
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186721
    Tested-by: Jenkins
    Reviewed-by: Armin Le Grand <[email protected]>

diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx 
b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
index 8a35c34b4e0d..127f6819492b 100644
--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
@@ -1045,9 +1045,31 @@ void 
VclMetafileProcessor2D::processFillGraphicPrimitive2D(
                                         rAttribute.getOffsetY()))) },
                         rFillGraphicPrimitive2D.getTransparency()));
 
-                // process UnifiedTransparencePrimitive2D primitive directly
-                processUnifiedTransparencePrimitive2D(
-                    static_cast<const 
primitive2d::UnifiedTransparencePrimitive2D&>(*aPrimitive));
+                // tdf#166709 see comments 21-23, we have two possibilities 
here:
+                // (a) use UnifiedTransparencePrimitive2D: test PDF is 47.5kb
+                // (b) use TransparencePrimitive2D: test PDF is 30.8 kb
+                // differences are described in the task. Due to (b) being 
smaller
+                // and is better re-loadable I opt for that. To be able to 
change
+                // this easily I let both versions stand here
+                static bool bTransparencePrimitive2DUse(true);
+
+                if (bTransparencePrimitive2DUse)
+                {
+                    // process recursively. Since this first gets the 
decomposition
+                    // (else a primitive processor would loop recursively) 
this will
+                    // use TransparencePrimitive2D, created by
+                    // UnifiedTransparencePrimitive2D::get2DDecomposition. 
This could
+                    // also be done here, but that decompose already has 
needed stuff
+                    // and we keep it in one place
+                    process(*aPrimitive);
+                }
+                else
+                {
+                    // process UnifiedTransparencePrimitive2D primitive 
directly
+                    processUnifiedTransparencePrimitive2D(
+                        static_cast<const 
primitive2d::UnifiedTransparencePrimitive2D&>(
+                            *aPrimitive));
+                }
 
                 // we are done, return
                 return;

Reply via email to