[Libreoffice-commits] core.git: emfio/qa emfio/source
Bartosz Kosiorek (via logerrit)
logerrit at kemper.freedesktop.org
Wed May 12 18:33:05 UTC 2021
emfio/qa/cppunit/emf/EmfImportTest.cxx | 24 ++++++++++++++++++++++++
emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf |binary
emfio/source/reader/mtftools.cxx | 10 +++++++++-
3 files changed, 33 insertions(+), 1 deletion(-)
New commits:
commit b5ece3fbc7f878846298fd9196e5a30ba50e0dc2
Author: Bartosz Kosiorek <gang65 at poczta.onet.pl>
AuthorDate: Wed May 12 19:03:59 2021 +0200
Commit: Bartosz Kosiorek <gang65 at poczta.onet.pl>
CommitDate: Wed May 12 20:32:27 2021 +0200
tdf#112603 tdf#142014 tdf#142139 WMF/EMF Fix line width
Previosly line width was always 1, and changing width do not affect
line.
Change-Id: I462096b915e053fa089e85860f124466b650558a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115497
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 78e613e2eafa..9e53b261a544 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 TestPolyLineWidth();
void TestRoundRect();
void TestCreatePen();
void TestPdfInEmf();
@@ -83,6 +84,7 @@ public:
CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
CPPUNIT_TEST(TestDrawPolyLine16WithClip);
CPPUNIT_TEST(TestFillRegion);
+ CPPUNIT_TEST(TestPolyLineWidth);
CPPUNIT_TEST(TestRoundRect);
CPPUNIT_TEST(TestCreatePen);
CPPUNIT_TEST(TestPdfInEmf);
@@ -438,6 +440,28 @@ void Test::TestFillRegion()
assertXPath(pDocument, "/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
}
+void Test::TestPolyLineWidth()
+{
+ // EMF import with records: CREATEPEN, ROUNDRECT.
+ Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolyLineWidth.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/polypolygon",
+ "path", "m530 529 1236-176-707 352z");
+ assertXPath(pDocument, "/primitive2D/metafile/transform/polypolygoncolor",
+ "color", "#ffff00");
+
+ assertXPathContent(pDocument, "/primitive2D/metafile/transform/polygonstroke/polygon",
+ "530,529 530,529 1766,353 1059,705");
+ assertXPath(pDocument, "/primitive2D/metafile/transform/polygonstroke/line",
+ "color", "#000000");
+ assertXPath(pDocument, "/primitive2D/metafile/transform/polygonstroke/line",
+ "width", "71");
+}
+
void Test::TestRoundRect()
{
// EMF import with records: CREATEPEN, ROUNDRECT.
diff --git a/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf b/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf
new file mode 100644
index 000000000000..792694fa8c99
Binary files /dev/null and b/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf differ
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 2b1c1d406d1b..2d9fe3601ebd 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -1322,7 +1322,8 @@ namespace emfio
if ( !bStroke )
mpGDIMetaFile->AddAction( new MetaPopAction() );
}
- else
+ // 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 ) ) )
{
sal_uInt16 i, nCount = maPathObj.Count();
for ( i = 0; i < nCount; i++ )
@@ -1408,6 +1409,13 @@ namespace emfio
UpdateLineStyle();
UpdateFillStyle();
mpGDIMetaFile->AddAction( new MetaRoundRectAction( ImplMap( rRect ), std::abs( ImplMap( rSize ).Width() ), std::abs( ImplMap( rSize ).Height() ) ) );
+ // tdf#142139 Wrong line width during WMF import
+ if ( maLineStyle.aLineInfo.GetWidth() || ( maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) )
+ {
+ tools::Polygon aRoundRectPoly( rRect, rSize.Width(), rSize.Height() );
+ aRoundRectPoly.Optimize( PolyOptimizeFlags::EDGES );
+ mpGDIMetaFile->AddAction( new MetaPolyLineAction( ImplMap( aRoundRectPoly ), maLineStyle.aLineInfo ) );
+ }
}
void MtfTools::DrawEllipse( const tools::Rectangle& rRect )
More information about the Libreoffice-commits
mailing list