officecfg/registry/schema/org/openoffice/Office/Common.xcs |    8 ++++++++
 vcl/source/gdi/print2.cxx                                  |   12 ++++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

New commits:
commit 43d1c753d12ad66c7f7ebd9b76d903ee21f83ef5
Author:     Vasily Melenchuk <vasily.melenc...@cib.de>
AuthorDate: Fri Jul 12 10:54:56 2019 +0300
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Wed Jul 17 23:13:35 2019 +0200

    vcl: make "Reduce Transparency" parameter tweakable
    
    "Reduce transparency" feature previously was using hardcoded
    value of 0.25. If current object area to whole printing area
    ratio exceeds this value, object is being written without
    any extra transparency layers in order to reduce metafile size.
    
    Right now this value can be adjusted in "Expert Configuration".
    Parameter is called "ReduceTransparencyMinArea".
    
    Change-Id: I43d5801a1dff6241de214f7b24425626dc06b4fb
    Reviewed-on: https://gerrit.libreoffice.org/75471
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 6d54c8159706..b389379a836a 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -877,6 +877,14 @@
         </info>
         <value>true</value>
       </prop>
+      <prop oor:name="ReduceTransparencyMinArea" oor:type="xs:int" 
oor:nillable="false">
+        <info>
+           <desc>Specifies minimal area of an object for applying "Reduce 
Transparency"
+           printer configuration option (removing object transparency). This 
value
+           is counted in percents of the printable area.</desc>
+        </info>
+        <value>25</value>
+      </prop>
     </group>
     <group oor:name="InternalMSExport">
       <info>
diff --git a/vcl/source/gdi/print2.cxx b/vcl/source/gdi/print2.cxx
index 2aec6add9634..0a470003f2fc 100644
--- a/vcl/source/gdi/print2.cxx
+++ b/vcl/source/gdi/print2.cxx
@@ -26,7 +26,7 @@
 #include <basegfx/polygon/b2dpolygon.hxx>
 #include <basegfx/polygon/b2dpolygontools.hxx>
 #include <sal/log.hxx>
-
+#include <officecfg/Office/Common.hxx>
 
 #include <vcl/virdev.hxx>
 #include <vcl/metaact.hxx>
@@ -723,6 +723,14 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( const 
GDIMetaFile& rInMtf,
         // nor checked for intersection against other aCCList elements
         ConnectedComponents aBackgroundComponent;
 
+        // Read the configuration value of minimal object area where 
transparency will be removed
+        double fReduceTransparencyMinArea = 
officecfg::Office::Common::VCL::ReduceTransparencyMinArea::get() / 100.0;
+        SAL_WARN_IF(fReduceTransparencyMinArea > 1.0, "vcl",
+            "Value of ReduceTransparencyMinArea config option is too high");
+        SAL_WARN_IF(fReduceTransparencyMinArea < 0.0, "vcl",
+            "Value of ReduceTransparencyMinArea config option is too low");
+        fReduceTransparencyMinArea = std::clamp(fReduceTransparencyMinArea, 
0.0, 1.0);
+
         // create an OutputDevice to record mapmode changes and the like
         ScopedVclPtrInstance< VirtualDevice > aMapModeVDev;
         aMapModeVDev->mnDPIX = mnDPIX;
@@ -1125,7 +1133,7 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( 
const GDIMetaFile& rInMtf,
                 const double fOutArea( 
static_cast<double>(aOutputRect.GetWidth()) * aOutputRect.GetHeight() );
 
                 // check if output doesn't exceed given size
-                if( bReduceTransparency && bTransparencyAutoMode && ( fBmpArea 
> ( 0.25 * fOutArea ) ) )
+                if( bReduceTransparency && bTransparencyAutoMode && ( fBmpArea 
> ( fReduceTransparencyMinArea * fOutArea ) ) )
                 {
                     // output normally. Therefore, we simply clear the
                     // special attribute, as everything non-special is
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to