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

Stephan van den Akker stephanv778 at gmail.com
Wed Mar 2 12:20:26 UTC 2016


 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 fe3ac0788666294eff66bb999f68e9cce9c3169e
Author: Stephan van den Akker <stephanv778 at gmail.com>
Date:   Wed Mar 2 00:17:03 2016 +0100

    Fix the import of line joins and caps from EMF files
    
    Change-Id: I976336d35366b661e402db484820b4dd9a7b0228
    Reviewed-on: https://gerrit.libreoffice.org/22821
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/test/source/mtfxmldump.cxx b/test/source/mtfxmldump.cxx
index 51264b9..2aab2fa 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 02eebdf..8c63027 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 ) );
                     }
                 }
diff --git a/vcl/source/filter/wmf/winmtf.hxx b/vcl/source/filter/wmf/winmtf.hxx
index 0d0f96b..6b9a25e 100644
--- a/vcl/source/filter/wmf/winmtf.hxx
+++ b/vcl/source/filter/wmf/winmtf.hxx
@@ -149,14 +149,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


More information about the Libreoffice-commits mailing list