[Libreoffice-commits] core.git: emfio/qa emfio/source

Bartosz Kosiorek (via logerrit) logerrit at kemper.freedesktop.org
Thu May 13 20:02:29 UTC 2021


 emfio/qa/cppunit/emf/EmfImportTest.cxx                  |   22 ++++++++++++++++
 emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf |binary
 emfio/source/reader/mtftools.cxx                        |   12 +++++---
 3 files changed, 30 insertions(+), 4 deletions(-)

New commits:
commit 699295ca7cab3a4f4e801a14496f202c05d18899
Author:     Bartosz Kosiorek <gang65 at poczta.onet.pl>
AuthorDate: Thu May 13 20:11:19 2021 +0200
Commit:     Bartosz Kosiorek <gang65 at poczta.onet.pl>
CommitDate: Thu May 13 22:00:05 2021 +0200

    tdf#142014 Fix displaying strokes when line width is 0
    
    Change-Id: I80e05ff2f24f5da2f5c124c0ee1b302a1c8226ea
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115570
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gang65 at poczta.onet.pl>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 9e53b261a544..be9a8a741fb2 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -58,6 +58,7 @@ class Test : public test::BootstrapFixture, public XmlTestTools, public unotest:
     void TestEllipseXformIntersectClipRect();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
+    void TestPolylinetoCloseStroke();
     void TestPolyLineWidth();
     void TestRoundRect();
     void TestCreatePen();
@@ -84,6 +85,7 @@ public:
     CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
+    CPPUNIT_TEST(TestPolylinetoCloseStroke);
     CPPUNIT_TEST(TestPolyLineWidth);
     CPPUNIT_TEST(TestRoundRect);
     CPPUNIT_TEST(TestCreatePen);
@@ -440,6 +442,26 @@ void Test::TestFillRegion()
     assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
 }
 
+void Test::TestPolylinetoCloseStroke()
+{
+    // EMF import with records: BEGINPATH, ARC, ENDPATH, STROKEPATH, EXTCREATEPEN.
+    Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.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/polygonhairline", 2);
+    assertXPathContent(pDocument, "/primitive2D/metafile/transform/polygonhairline[1]/polygon",
+                       "1080,150 810,230 570,340 370,490 290,570 170,750 130,840 100,980 100,1080 140,1270 160,1320 210,1410 400,1620 500,1690");
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polygonhairline[1]",
+                "color", "#000000");
+    assertXPathContent(pDocument, "/primitive2D/metafile/transform/polygonhairline[2]/polygon",
+                       "1760,1120 1500,1180 1350,1240 1230,1310 1210,1330 1120,1440 1110,1460 1100,1510 1100,1580 1140,1670 1170,1710 1190,1730");
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polygonhairline[2]",
+                "color", "#000000");
+}
+
 void Test::TestPolyLineWidth()
 {
     // EMF import with records: CREATEPEN, ROUNDRECT.
diff --git a/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf b/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf
new file mode 100644
index 000000000000..e89e92272943
Binary files /dev/null and b/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf differ
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 2d9fe3601ebd..011ff4647a11 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -1323,11 +1323,15 @@ namespace emfio
                 mpGDIMetaFile->AddAction( new MetaPopAction() );
         }
         // tdf#142014 By default the stroke is made with hairline. If width is bigger, we need to use PolyLineAction
-        if ( bStroke && ( maLineStyle.aLineInfo.GetWidth() || ( maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) ) )
+        if ( bStroke )
         {
-            sal_uInt16 i, nCount = maPathObj.Count();
-            for ( i = 0; i < nCount; i++ )
-                mpGDIMetaFile->AddAction( new MetaPolyLineAction( maPathObj[ i ], maLineStyle.aLineInfo ) );
+            // bFill is drawing hairstyle line. So we need to to draw it only when the width is different than 0
+            if ( !bFill || maLineStyle.aLineInfo.GetWidth() || ( maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) )
+            {
+                sal_uInt16 i, nCount = maPathObj.Count();
+                for ( i = 0; i < nCount; i++ )
+                    mpGDIMetaFile->AddAction( new MetaPolyLineAction( maPathObj[ i ], maLineStyle.aLineInfo ) );
+            }
         }
         ClearPath();
     }


More information about the Libreoffice-commits mailing list