[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - drawinglayer/source emfio/qa emfio/source

Bartosz Kosiorek (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 6 12:04:48 UTC 2021


 drawinglayer/source/tools/primitive2dxmldump.cxx         |    9 ++++
 emfio/qa/cppunit/emf/EmfImportTest.cxx                   |   30 +++++++++++++++
 emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf |binary
 emfio/qa/cppunit/wmf/wmfimporttest.cxx                   |    9 ++--
 emfio/source/reader/mtftools.cxx                         |   27 +++----------
 5 files changed, 50 insertions(+), 25 deletions(-)

New commits:
commit 8deb9b3d2f8781628db73d3b2a3c7939ea4fcc2d
Author:     Bartosz Kosiorek <gang65 at poczta.onet.pl>
AuthorDate: Fri Apr 2 16:06:11 2021 +0200
Commit:     Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Tue Apr 6 14:04:15 2021 +0200

    tdf#37281 tdf#45820 tdf#48916 tdf#55058 EMF Implement complex clipping
    
    As the visual glitches were resolved with:
    https://gerrit.libreoffice.org/c/core/+/113423
    
    It is time for enabling complex clipping.
    
    Change-Id: I12edc88fc9a55c8deedf3d87faeb50cfe0067a01
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113520
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Reviewed-by: Bartosz Kosiorek <gang65 at poczta.onet.pl>
    (cherry picked from commit aa17ea3d36b8f1ea8cd3d2fb215e80051547439d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113637
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx
index 7a19e0486c89..ade8cfaed89b 100644
--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
+++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
@@ -311,6 +311,15 @@ void Primitive2dXmlDump::decomposeAndWrite(
             }
             break;
 
+            case PRIMITIVE2D_ID_GROUPPRIMITIVE2D:
+            {
+                const GroupPrimitive2D& rGroupPrimitive2D = dynamic_cast<const GroupPrimitive2D&>(*pBasePrimitive);
+                rWriter.startElement("group");
+                decomposeAndWrite(rGroupPrimitive2D.getChildren(), rWriter);
+                rWriter.endElement();
+            }
+            break;
+
             case PRIMITIVE2D_ID_MASKPRIMITIVE2D:
             {
                 const MaskPrimitive2D& rMaskPrimitive2D = dynamic_cast<const MaskPrimitive2D&>(*pBasePrimitive);
diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index f4c75e883d30..51c0cc115987 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -50,6 +50,7 @@ class Test : public test::BootstrapFixture, public XmlTestTools, public unotest:
     void TestLinearGradient();
     void TestTextMapMode();
     void TestEnglishMapMode();
+    void TestDrawPolyLine16WithClip();
     void TestFillRegion();
     void TestCreatePen();
     void TestPdfInEmf();
@@ -69,6 +70,7 @@ public:
     CPPUNIT_TEST(TestLinearGradient);
     CPPUNIT_TEST(TestTextMapMode);
     CPPUNIT_TEST(TestEnglishMapMode);
+    CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
     CPPUNIT_TEST(TestCreatePen);
     CPPUNIT_TEST(TestPdfInEmf);
@@ -310,6 +312,34 @@ void Test::TestEnglishMapMode()
 
 }
 
+void Test::TestDrawPolyLine16WithClip()
+{
+    // Check import of EMF image with records:
+    // CREATEBRUSHINDIRECT, FILLRGN, BEGINPATH, POLYGON16, SELECTCLIPPATH, MODIFYWORLDTRANSFORM, SELECTOBJECT
+    Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence));
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polypolygon", "path", "m0 0h3943v3939h-3943z");
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polypolygoncolor", 1);
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon",
+                "path", "m1323 0h1323v1322h1323v1322h-1323v1322h-1323v-1322h-1323v-1322h1323z");
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polypolygoncolor[1]", "color", "#b4ffff");
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polygonhairline", 1);
+    assertXPathContent(pDocument, "/primitive2D/metafile/transform/mask/polygonhairline[1]/polygon",
+                       "1323,0 2646,0 2646,1322 3969,1322 3969,2644 2646,2644 2646,3966 1323,3966 1323,2644 0,2644 0,1322 1323,1322");
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
+
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/mask/group[1]/mask/polypolygon", "path", "m2646 0v1322h1323v1322h-1323v1322h-1323v-1322h-1323v-1322h1323v-1322");
+    assertXPathContent(pDocument, "/primitive2D/metafile/transform/mask/group[1]/mask/polygonstroke/polygon", "0,793 3969,4230");
+
+}
+
 void Test::TestFillRegion()
 {
     // Check import of EMF image with records: CREATEBRUSHINDIRECT, FILLRGN. The SETICMMODE is also used.
diff --git a/emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf b/emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf
new file mode 100644
index 000000000000..acb69cc34ce3
Binary files /dev/null and b/emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf differ
diff --git a/emfio/qa/cppunit/wmf/wmfimporttest.cxx b/emfio/qa/cppunit/wmf/wmfimporttest.cxx
index 5dfcfdad2041..f63138bfa4b6 100644
--- a/emfio/qa/cppunit/wmf/wmfimporttest.cxx
+++ b/emfio/qa/cppunit/wmf/wmfimporttest.cxx
@@ -122,10 +122,11 @@ void WmfTest::testEmfProblem()
 
     CPPUNIT_ASSERT(pDoc);
 
-    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "top", "427");
-    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "left", "740");
-    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "bottom", "2823");
-    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "right", "1876");
+    assertXPath(pDoc, "/metafile/sectrectclipregion", 2);
+    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "top", "2125");
+    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "left", "1084");
+    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "bottom", "2927");
+    assertXPath(pDoc, "/metafile/sectrectclipregion[1]", "right", "2376");
 }
 
 void WmfTest::testEmfLineStyles()
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 94ddcd549cec..092e26d3a0d9 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -1170,31 +1170,16 @@ namespace emfio
         mbComplexClip = rClipPoly.count() > 1
             || !basegfx::utils::isRectangle(rClipPoly);
 
-        static bool bEnableComplexClipViaRegion = getenv("SAL_WMF_COMPLEXCLIP_VIA_REGION") != nullptr;
-
-        if (bEnableComplexClipViaRegion)
+        // This makes cases like tdf#45820 work in reasonable time.
+        if (mbComplexClip)
         {
-            //this makes cases like tdf#45820 work in reasonable time, and I feel in theory should
-            //be just fine. In practice I see the output is different so needs work before its the
-            //default, but for file fuzzing it should be good enough
-            if (mbComplexClip)
-            {
-                mpGDIMetaFile->AddAction(
-                    new MetaISectRegionClipRegionAction(
-                        vcl::Region(rClipPoly)));
-                mbComplexClip = false;
-            }
-            else
-            {
-                mpGDIMetaFile->AddAction(
-                    new MetaISectRectClipRegionAction(
-                        vcl::unotools::rectangleFromB2DRectangle(
-                            rClipPoly.getB2DRange())));
-            }
+            mpGDIMetaFile->AddAction(
+                new MetaISectRegionClipRegionAction(
+                    vcl::Region(rClipPoly)));
+            mbComplexClip = false;
         }
         else
         {
-            //normal case
             mpGDIMetaFile->AddAction(
                 new MetaISectRectClipRegionAction(
                     vcl::unotools::rectangleFromB2DRectangle(


More information about the Libreoffice-commits mailing list