sd/qa/unit/PNGExportTests.cxx                 |   68 ++++++++++++++++++++++++++
 sd/qa/unit/data/odg/diagonalLine.fodg         |   39 ++++++++++++++
 svtools/source/config/optionsdrawinglayer.cxx |   13 ++--
 3 files changed, 114 insertions(+), 6 deletions(-)

New commits:
commit 9128844325e98ed52167d1ed8afe19d0957cd329
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Apr 27 17:10:06 2023 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Fri Apr 28 07:50:33 2023 +0300

    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.kagan...@collabora.com>

diff --git a/sd/qa/unit/PNGExportTests.cxx b/sd/qa/unit/PNGExportTests.cxx
index 2c77bd9bbfed..69f4dda97e3c 100644
--- a/sd/qa/unit/PNGExportTests.cxx
+++ b/sd/qa/unit/PNGExportTests.cxx
@@ -461,4 +461,72 @@ CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf99729)
                                  nonwhitecounts[1]);
 }
 
+CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf155048)
+{
+    loadFromURL(u"odg/diagonalLine.fodg");
+
+    uno::Reference<drawing::XGraphicExportFilter> xGraphicExporter
+        = drawing::GraphicExportFilter::create(getComponentContext());
+    CPPUNIT_ASSERT(xGraphicExporter);
+
+    uno::Reference<drawing::XDrawPagesSupplier> xSupplier(mxComponent, 
uno::UNO_QUERY_THROW);
+    uno::Reference<lang::XComponent> 
xPage(xSupplier->getDrawPages()->getByIndex(0),
+                                           uno::UNO_QUERY_THROW);
+    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 000000000000..f6f8edec46bc
--- /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 2fee81139800..0564adffa94c 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;
 }
 

Reply via email to