diff options
author | Stephan van den Akker <stephanv778@gmail.com> | 2016-03-02 00:17:03 +0100 |
---|---|---|
committer | Chris Sherlock <chris.sherlock79@gmail.com> | 2016-03-06 13:28:04 +0000 |
commit | 185194a3d935cb92d4f1d50c8987d1e8d69c5041 (patch) | |
tree | f01ab4d287812209f46cfb977cadbacd9602428d /vcl | |
parent | 6b3dd63dea6861180f438db71ca3f73df2aef200 (diff) |
Fix the import of line joins and caps from EMF files
Backported fix to 5.1
Change-Id: I976336d35366b661e402db484820b4dd9a7b0228
Reviewed-on: https://gerrit.libreoffice.org/22821
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/22946
Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com>
Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/qa/cppunit/wmf/wmfimporttest.cxx | 16 | ||||
-rw-r--r-- | vcl/source/filter/wmf/enhwmf.cxx | 36 |
2 files changed, 49 insertions, 3 deletions
diff --git a/vcl/qa/cppunit/wmf/wmfimporttest.cxx b/vcl/qa/cppunit/wmf/wmfimporttest.cxx index 2a1a34196b60..6740446105f9 100644 --- a/vcl/qa/cppunit/wmf/wmfimporttest.cxx +++ b/vcl/qa/cppunit/wmf/wmfimporttest.cxx @@ -147,23 +147,37 @@ void WmfTest::testEmfLineStyles() assertXPath(pDoc, "/metafile/line[1]", "style", "dash"); assertXPath(pDoc, "/metafile/line[1]", "dashlen", "225"); + assertXPath(pDoc, "/metafile/line[1]", "dashcount", "1"); assertXPath(pDoc, "/metafile/line[1]", "dotlen", "0"); - assertXPath(pDoc, "/metafile/line[1]", "distance", "100"); + assertXPath(pDoc, "/metafile/line[1]", "dotcount", "0"); + assertXPath(pDoc, "/metafile/line[1]", "distance", "176"); + assertXPath(pDoc, "/metafile/line[1]", "join", "miter"); + assertXPath(pDoc, "/metafile/line[1]", "cap", "butt"); assertXPath(pDoc, "/metafile/line[2]", "style", "dash"); assertXPath(pDoc, "/metafile/line[2]", "dashlen", "0"); + assertXPath(pDoc, "/metafile/line[2]", "dashcount", "0"); assertXPath(pDoc, "/metafile/line[2]", "dotlen", "30"); + assertXPath(pDoc, "/metafile/line[2]", "dotcount", "1"); assertXPath(pDoc, "/metafile/line[2]", "distance", "50"); + assertXPath(pDoc, "/metafile/line[2]", "join", "miter"); + assertXPath(pDoc, "/metafile/line[2]", "cap", "butt"); assertXPath(pDoc, "/metafile/line[3]", "style", "dash"); assertXPath(pDoc, "/metafile/line[3]", "dashlen", "150"); + assertXPath(pDoc, "/metafile/line[3]", "dashcount", "1"); assertXPath(pDoc, "/metafile/line[3]", "dotlen", "30"); + assertXPath(pDoc, "/metafile/line[3]", "dotcount", "1"); assertXPath(pDoc, "/metafile/line[3]", "distance", "90"); assertXPath(pDoc, "/metafile/line[4]", "style", "dash"); assertXPath(pDoc, "/metafile/line[4]", "dashlen", "150"); + assertXPath(pDoc, "/metafile/line[4]", "dashcount", "1"); assertXPath(pDoc, "/metafile/line[4]", "dotlen", "30"); + assertXPath(pDoc, "/metafile/line[4]", "dotcount", "2"); assertXPath(pDoc, "/metafile/line[4]", "distance", "50"); + assertXPath(pDoc, "/metafile/line[4]", "join", "miter"); + assertXPath(pDoc, "/metafile/line[4]", "cap", "butt"); }; void WmfTest::testWorldTransformFontSize() diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx index af35d6da5c6e..c1c8160286b3 100644 --- a/vcl/source/filter/wmf/enhwmf.cxx +++ b/vcl/source/filter/wmf/enhwmf.cxx @@ -953,7 +953,7 @@ bool EnhWMFReader::ReadEnhWMF() default : aLineInfo.SetStyle( LINE_SOLID ); } - switch( nStyle & 0xF00 ) + switch( nStyle & PS_ENDCAP_STYLE_MASK ) { case PS_ENDCAP_ROUND : if ( aSize.Width() ) @@ -971,7 +971,7 @@ bool EnhWMFReader::ReadEnhWMF() default : aLineInfo.SetLineCap( css::drawing::LineCap_BUTT ); } - switch( nStyle & 0xF000 ) + switch( nStyle & PS_JOIN_STYLE_MASK ) { case PS_JOIN_ROUND : aLineInfo.SetLineJoin ( basegfx::B2DLineJoin::Round ); @@ -1051,6 +1051,38 @@ bool EnhWMFReader::ReadEnhWMF() default : aLineInfo.SetStyle( LINE_SOLID ); } + switch( nStyle & PS_ENDCAP_STYLE_MASK ) + { + case PS_ENDCAP_ROUND : + if ( aLineInfo.GetWidth() ) + { + aLineInfo.SetLineCap( css::drawing::LineCap_ROUND ); + break; + } + case PS_ENDCAP_SQUARE : + if ( aLineInfo.GetWidth() ) + { + aLineInfo.SetLineCap( css::drawing::LineCap_SQUARE ); + break; + } + case PS_ENDCAP_FLAT : + default : + aLineInfo.SetLineCap( css::drawing::LineCap_BUTT ); + } + switch( nStyle & PS_JOIN_STYLE_MASK ) + { + case PS_JOIN_ROUND : + aLineInfo.SetLineJoin ( basegfx::B2DLineJoin::Round ); + break; + case PS_JOIN_MITER : + aLineInfo.SetLineJoin ( basegfx::B2DLineJoin::Miter ); + break; + case PS_JOIN_BEVEL : + aLineInfo.SetLineJoin ( basegfx::B2DLineJoin::Bevel ); + break; + default : + aLineInfo.SetLineJoin ( basegfx::B2DLineJoin::NONE ); + } pOut->CreateObject( nIndex, GDI_PEN, new WinMtfLineStyle( aColorRef, aLineInfo, bTransparent ) ); } } |