emfio/qa/cppunit/emf/EmfImportTest.cxx                              |   25 
++++++++--
 emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf |binary
 emfio/source/reader/emfreader.cxx                                   |    9 +++
 3 files changed, 30 insertions(+), 4 deletions(-)

New commits:
commit 24e71494d7d1a68b2cb5f5d34083ab02009e0982
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Tue May 4 16:49:25 2021 +0200
Commit:     Bartosz Kosiorek <gan...@poczta.onet.pl>
CommitDate: Wed May 5 10:24:01 2021 +0200

    tdf#55058 tdf#141982 EMF: Add rotation and path support for RECTANGLE record
    
    Previous implementation of EMR_RECTANGLE, doesn't support rotation
    and EMR_RECTANGLE was not work with EMR_BEGINPATH, EMR_ENDPATH and 
EMR_ABORTPATH
    
    The EMR_BEGINPATH opens path bracket construction.
    
    Once path bracket construction is open, an application can begin specifying 
records to
    define the points that lie in the path. Path bracket construction MUST be 
closed by an
    EMR_ABORTPATH or EMR_ENDPATH record.
    
    With this patch all these issue was resolved for EMR_RECTANGLE
    Change-Id: Ic51442df8905e47c92eed811cc776762c9752af2
    
    Change-Id: I111f183e509f03c0b276a038680f61156b37b235
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115065
    Tested-by: Jenkins
    Tested-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 590b0e6beac1..aa62dcd4b00b 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -52,6 +52,7 @@ class Test : public test::BootstrapFixture, public 
XmlTestTools, public unotest:
     void TestLinearGradient();
     void TestTextMapMode();
     void TestEnglishMapMode();
+    void TestRectangleWithModifyWorldTransform();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
     void TestCreatePen();
@@ -72,6 +73,7 @@ public:
     CPPUNIT_TEST(TestLinearGradient);
     CPPUNIT_TEST(TestTextMapMode);
     CPPUNIT_TEST(TestEnglishMapMode);
+    CPPUNIT_TEST(TestRectangleWithModifyWorldTransform);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
     CPPUNIT_TEST(TestCreatePen);
@@ -127,7 +129,7 @@ void Test::testPolyPolygon()
     assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polypolygon", 
"path", "m0 0h19746v14817h-19746z");
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor", 2);
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]", "color", "#ffffff");
-    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon", "path", 
"m0 0h19780v14851h-19780z");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon", "path", 
"m0 0h19781v14852h-19781z");
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[2]/polypolygon", "path", 
"m2574 13194v-12065h15303v12065z");
 
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke", 116);
@@ -294,7 +296,7 @@ void Test::TestEnglishMapMode()
 
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor", 3);
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]", "color", "#ffffad");
-    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon", "path", 
"m-1-1h29699v21005h-29699z");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon", "path", 
"m-1-1h29700v21001h-29700z");
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[2]/polypolygon", "path", 
"m1058 7937v5293h3175v-1059h-2118v-4234z");
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[3]/polypolygon", "path", 
"m12699 1058h4234v1060h-1587v4231h-1059v-4231h-1588z");
 
@@ -307,11 +309,28 @@ void Test::TestEnglishMapMode()
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/textsimpleportion[1]", "height", "424");
 
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline", 3);
-    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[1]/polygon", "-1,-1 
29698,-1 29698,21004 -1,21004");
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[1]/polygon", "-1,-1 
29699,-1 29699,21000 -1,21000");
     assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[2]/polygon", "1058,7937 
1058,13230 4233,13230 4233,12171 2115,12171 2115,7937");
     assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[3]/polygon", "12699,1058 
16933,1058 16933,2118 15346,2118 15346,6349 14287,6349 14287,2118 12699,2118");
+}
+
+
+void Test::TestRectangleWithModifyWorldTransform()
+{
+    // Check import of EMF image with records: EXTCREATEPEN, SELECTOBJECT, 
MODIFYWORLDTRANSFORM, RECTANGLE
+
+    Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.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/polypolygoncolor", 
1);
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polypolygoncolor[1]", "color", "#ffffff");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polypolygoncolor[1]/polypolygon", "path", 
"m1042 417 918 529 353 610-918-528z");
 
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polygonstroke", 1);
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/polygonstroke[1]/polygon", "1042,417 1960,946 
2313,1556 1395,1028");
 }
 
 void Test::TestDrawPolyLine16WithClip()
diff --git 
a/emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf 
b/emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf
new file mode 100644
index 000000000000..8f8889284229
Binary files /dev/null and 
b/emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf differ
diff --git a/emfio/source/reader/emfreader.cxx 
b/emfio/source/reader/emfreader.cxx
index ecef6ba6fe95..2296855c7603 100644
--- a/emfio/source/reader/emfreader.cxx
+++ b/emfio/source/reader/emfreader.cxx
@@ -1341,7 +1341,14 @@ namespace emfio
                     case EMR_RECTANGLE :
                     {
                         mpInputStream->ReadInt32( nX32 ).ReadInt32( nY32 
).ReadInt32( nx32 ).ReadInt32( ny32 );
-                        DrawRect( ReadRectangle( nX32, nY32, nx32, ny32 ) );
+                        SAL_INFO("emfio", "\t\t Rectangle, left: " << nX32 << 
", top: " << nY32 << ", right: " << nx32 << ", bottom: " << ny32);
+                        Point aPoints[] { Point(nX32, nY32),
+                                          Point(nx32, nY32),
+                                          Point(nx32, ny32),
+                                          Point(nX32, ny32) };
+                        tools::Polygon aPoly(4, aPoints);
+                        aPoly.Optimize( PolyOptimizeFlags::CLOSE );
+                        DrawPolygon( aPoly, mbRecordPath );
                     }
                     break;
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to