diff options
-rw-r--r-- | officecfg/registry/schema/org/openoffice/Office/Common.xcs | 8 | ||||
-rw-r--r-- | vcl/source/gdi/print2.cxx | 12 |
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 |