tdf#155048: forward AntiAliasing to drawinglayer also in temporary case
Commit 444bf8710d5da7b584fbcb94693e4ed8d2e29297 (Update handling of
AntiAliasing settings and processor2d, 2022-11-08) made respective
changes so that SvtOptionsDrawinglayer::SetAntiAliasing forwards the
setting to drawinglayer. However, it only happened in non-temporary
case, which is fixed now.
Change-Id: I66f5630dde759e3a3aa305ef38f60c8e24e6330e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151109
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/sd/qa/unit/PNGExportTests.cxx b/sd/qa/unit/PNGExportTests.cxx
index dcbe5405..b3863c8 100644
--- a/sd/qa/unit/PNGExportTests.cxx
+++ b/sd/qa/unit/PNGExportTests.cxx
@@ -461,4 +461,70 @@ CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf99729)
nonwhitecounts[1]);
}
CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf155048)
{
loadFromURL(u"odg/diagonalLine.fodg");
auto xGraphicExporter = drawing::GraphicExportFilter::create(getComponentContext());
CPPUNIT_ASSERT(xGraphicExporter);
auto xSupplier = mxComponent.queryThrow<css::drawing::XDrawPagesSupplier>();
auto xPage = xSupplier->getDrawPages()->getByIndex(0).queryThrow<css::lang::XComponent>();
xGraphicExporter->setSourceDocument(xPage);
// 1. AA disabled
{
css::uno::Sequence<css::beans::PropertyValue> aFilterData{
comphelper::makePropertyValue("PixelWidth", sal_Int32(200)),
comphelper::makePropertyValue("PixelHeight", sal_Int32(200)),
comphelper::makePropertyValue("AntiAliasing", false),
};
css::uno::Sequence<css::beans::PropertyValue> aDescriptor{
comphelper::makePropertyValue("URL", maTempFile.GetURL()),
comphelper::makePropertyValue("FilterName", OUString("PNG")),
comphelper::makePropertyValue("FilterData", aFilterData)
};
xGraphicExporter->filter(aDescriptor);
BitmapEx bmp = vcl::PngImageReader(*maTempFile.GetStream(StreamMode::READ)).read();
std::set<Color> foundColors;
for (tools::Long x = 0; x < bmp.GetSizePixel().Width(); ++x)
for (tools::Long y = 0; y < bmp.GetSizePixel().Height(); ++y)
foundColors.insert(bmp.GetPixelColor(x, y));
// There must be only two colors (white and blue) in the bitmap generated without AA
CPPUNIT_ASSERT_EQUAL(size_t(2), foundColors.size());
maTempFile.CloseStream();
}
// 2. AA enabled
{
css::uno::Sequence<css::beans::PropertyValue> aFilterData{
comphelper::makePropertyValue("PixelWidth", sal_Int32(200)),
comphelper::makePropertyValue("PixelHeight", sal_Int32(200)),
comphelper::makePropertyValue("AntiAliasing", true),
};
css::uno::Sequence<css::beans::PropertyValue> aDescriptor{
comphelper::makePropertyValue("URL", maTempFile.GetURL()),
comphelper::makePropertyValue("FilterName", OUString("PNG")),
comphelper::makePropertyValue("FilterData", aFilterData)
};
xGraphicExporter->filter(aDescriptor);
BitmapEx bmp = vcl::PngImageReader(*maTempFile.GetStream(StreamMode::READ)).read();
std::set<Color> foundColors;
for (tools::Long x = 0; x < bmp.GetSizePixel().Width(); ++x)
for (tools::Long y = 0; y < bmp.GetSizePixel().Height(); ++y)
foundColors.insert(bmp.GetPixelColor(x, y));
// With AA, the number of colors will be greater - it is 19 on my system
CPPUNIT_ASSERT_GREATER(size_t(2), foundColors.size());
maTempFile.CloseStream();
}
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sd/qa/unit/data/odg/diagonalLine.fodg b/sd/qa/unit/data/odg/diagonalLine.fodg
new file mode 100644
index 0000000..f6f8ede
--- /dev/null
+++ b/sd/qa/unit/data/odg/diagonalLine.fodg
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.graphics">
<office:styles>
<draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 20" svg:d="M0 20l10-20 10 20z"/>
<style:style style:name="standard" style:family="graphic">
<style:graphic-properties draw:stroke="solid" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:marker-end-width="0.2cm" draw:marker-end-center="false" draw:fill="none"/>
</style:style>
</office:styles>
<office:automatic-styles>
<style:page-layout style:name="PM0">
<style:page-layout-properties fo:margin-top="1cm" fo:margin-bottom="1cm" fo:margin-left="1cm" fo:margin-right="1cm" fo:page-width="5cm" fo:page-height="5cm" style:print-orientation="portrait"/>
</style:page-layout>
<style:style style:name="dp1" style:family="drawing-page">
<style:drawing-page-properties draw:background-size="border" draw:fill="none"/>
</style:style>
<style:style style:name="dp2" style:family="drawing-page"/>
<style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
<style:graphic-properties svg:stroke-width="0cm" draw:marker-end="Arrowheads_20_1" draw:fill="none" draw:textarea-vertical-align="middle"/>
</style:style>
</office:automatic-styles>
<office:master-styles>
<draw:layer-set>
<draw:layer draw:name="layout"/>
<draw:layer draw:name="background"/>
<draw:layer draw:name="backgroundobjects"/>
<draw:layer draw:name="controls"/>
<draw:layer draw:name="measurelines"/>
</draw:layer-set>
<style:master-page style:name="Default" style:page-layout-name="PM0" draw:style-name="dp1"/>
</office:master-styles>
<office:body>
<office:drawing>
<draw:page draw:name="page1" draw:style-name="dp2" draw:master-page-name="Default">
<draw:line draw:style-name="gr1" draw:layer="layout" svg:x1="1cm" svg:y1="4cm" svg:x2="4cm" svg:y2="1cm"/>
</draw:page>
</office:drawing>
</office:body>
</office:document>
\ No newline at end of file
diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx
index 2fee811..0564adf 100644
--- a/svtools/source/config/optionsdrawinglayer.cxx
+++ b/svtools/source/config/optionsdrawinglayer.cxx
@@ -183,14 +183,15 @@ void SetAntiAliasing( bool bOn, bool bTemporary )
comphelper::ConfigurationChanges::create();
officecfg::Office::Common::Drawinglayer::AntiAliasing::set(bOn, batch);
batch->commit();
if(!gbAntiAliasingForwardInitial || gbAntiAliasingForwardLast != bOn)
{
gbAntiAliasingForwardInitial = true;
gbAntiAliasingForwardLast = bOn;
drawinglayer::geometry::ViewInformation2D::forwardAntiAliasing(bOn);
}
}
if (!gbAntiAliasingForwardInitial || gbAntiAliasingForwardLast != bOn)
{
gbAntiAliasingForwardInitial = true;
gbAntiAliasingForwardLast = bOn;
drawinglayer::geometry::ViewInformation2D::forwardAntiAliasing(bOn);
}
gbAntiAliasing = bOn;
}