test/source/mtfxmldump.cxx | 28 ++++++++++++++++++++++++++- vcl/qa/cppunit/wmf/wmfimporttest.cxx | 16 +++++++++++++++ vcl/source/filter/wmf/enhwmf.cxx | 36 +++++++++++++++++++++++++++++++++-- vcl/source/filter/wmf/winmtf.hxx | 9 ++++---- 4 files changed, 82 insertions(+), 7 deletions(-)
New commits: commit 4a17335d608c2954c482734ce4912100cb0e7aff Author: Stephan van den Akker <[email protected]> Date: Wed Mar 2 00:17:03 2016 +0100 Fix the import of line joins and caps from EMF files Backported fix to 5.0. Note that commit 42f771d6e changed from constant values for line joins to an enum, but that only got into the 5.1 branch so have had to use the old constants. Change-Id: I976336d35366b661e402db484820b4dd9a7b0228 Reviewed-on: https://gerrit.libreoffice.org/22821 Reviewed-by: Tomaž Vajngerl <[email protected]> Tested-by: Tomaž Vajngerl <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/22947 Reviewed-by: Chris Sherlock <[email protected]> Tested-by: Chris Sherlock <[email protected]> diff --git a/test/source/mtfxmldump.cxx b/test/source/mtfxmldump.cxx index 3df33b9..9ca0603 100644 --- a/test/source/mtfxmldump.cxx +++ b/test/source/mtfxmldump.cxx @@ -124,6 +124,29 @@ OUString convertLineStyleToString(LineStyle eAlign) return OUString(); } +OUString convertLineJoinToString(basegfx::B2DLineJoin eJoin) +{ + switch (eJoin) + { + default: + case basegfx::B2DLINEJOIN_NONE: return OUString("none"); + case basegfx::B2DLINEJOIN_BEVEL: return OUString("bevel"); + case basegfx::B2DLINEJOIN_MITER: return OUString("miter"); + case basegfx::B2DLINEJOIN_ROUND: return OUString("round"); + } +} + +OUString convertLineCapToString(css::drawing::LineCap eCap) +{ + switch (eCap) + { + default: + case css::drawing::LineCap_BUTT: return OUString("butt"); + case css::drawing::LineCap_ROUND: return OUString("round"); + case css::drawing::LineCap_SQUARE: return OUString("square"); + } +} + OUString convertFontWeigthToString(FontWeight eFontWeight) { enum FontWeight { WEIGHT_DONTKNOW, WEIGHT_THIN, WEIGHT_ULTRALIGHT, @@ -282,9 +305,12 @@ void MetafileXmlDump::writeXml(const GDIMetaFile& rMetaFile, XmlWriter& rWriter) rWriter.attribute("style", convertLineStyleToString(aLineInfo.GetStyle())); rWriter.attribute("width", aLineInfo.GetWidth()); rWriter.attribute("dashlen", aLineInfo.GetDashLen()); + rWriter.attribute("dashcount", aLineInfo.GetDashCount()); rWriter.attribute("dotlen", aLineInfo.GetDotLen()); + rWriter.attribute("dotcount", aLineInfo.GetDotCount()); rWriter.attribute("distance", aLineInfo.GetDistance()); - + rWriter.attribute("join", convertLineJoinToString(aLineInfo.GetLineJoin())); + rWriter.attribute("cap", convertLineCapToString(aLineInfo.GetLineCap())); rWriter.endElement(); } break; diff --git a/vcl/qa/cppunit/wmf/wmfimporttest.cxx b/vcl/qa/cppunit/wmf/wmfimporttest.cxx index 2a1a341..32c4d90 100644 --- a/vcl/qa/cppunit/wmf/wmfimporttest.cxx +++ b/vcl/qa/cppunit/wmf/wmfimporttest.cxx @@ -147,23 +147,39 @@ 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]", "dotcount", "0"); assertXPath(pDoc, "/metafile/line[1]", "distance", "100"); + 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[3]", "join", "miter"); + assertXPath(pDoc, "/metafile/line[3]", "cap", "butt"); 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 470e1b2..5b1099d 100644 --- a/vcl/source/filter/wmf/enhwmf.cxx +++ b/vcl/source/filter/wmf/enhwmf.cxx @@ -943,7 +943,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() ) @@ -961,7 +961,7 @@ bool EnhWMFReader::ReadEnhWMF() default : aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_BUTT ); } - switch( nStyle & 0xF000 ) + switch( nStyle & PS_JOIN_STYLE_MASK ) { case PS_JOIN_ROUND : aLineInfo.SetLineJoin ( basegfx::B2DLINEJOIN_ROUND ); @@ -1041,6 +1041,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 ) ); } } diff --git a/vcl/source/filter/wmf/winmtf.hxx b/vcl/source/filter/wmf/winmtf.hxx index dd35561..fcc06a9 100644 --- a/vcl/source/filter/wmf/winmtf.hxx +++ b/vcl/source/filter/wmf/winmtf.hxx @@ -148,14 +148,15 @@ struct WMF_EXTERNALHEADER; #define PS_INSIDEFRAME 6 #define PS_STYLE_MASK 15 -#define PS_ENDCAP_ROUND 0x000 -#define PS_ENDCAP_SQUARE 0x100 -#define PS_ENDCAP_FLAT 0x200 +#define PS_ENDCAP_ROUND 0x000 +#define PS_ENDCAP_SQUARE 0x100 +#define PS_ENDCAP_FLAT 0x200 +#define PS_ENDCAP_STYLE_MASK 0xF00 #define PS_JOIN_ROUND 0x0000 #define PS_JOIN_BEVEL 0x1000 #define PS_JOIN_MITER 0x2000 - +#define PS_JOIN_STYLE_MASK 0xF000 #define ANSI_CHARSET 0 #define DEFAULT_CHARSET 1
_______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
