summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs8
-rw-r--r--vcl/source/gdi/print2.cxx12
2 files changed, 18 insertions, 2 deletions
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