summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/qa/cppunit/wmf/wmfimporttest.cxx24
-rw-r--r--vcl/source/filter/wmf/enhwmf.cxx26
-rw-r--r--vcl/source/filter/wmf/winmtf.cxx12
-rw-r--r--vcl/source/filter/wmf/winwmf.cxx11
4 files changed, 27 insertions, 46 deletions
diff --git a/vcl/qa/cppunit/wmf/wmfimporttest.cxx b/vcl/qa/cppunit/wmf/wmfimporttest.cxx
index 32c4d9019c95..176ff5dda15e 100644
--- a/vcl/qa/cppunit/wmf/wmfimporttest.cxx
+++ b/vcl/qa/cppunit/wmf/wmfimporttest.cxx
@@ -146,38 +146,38 @@ void WmfTest::testEmfLineStyles()
assertXPath(pDoc, "/metafile/linecolor[5]", "color", "#0000ff");
assertXPath(pDoc, "/metafile/line[1]", "style", "dash");
- assertXPath(pDoc, "/metafile/line[1]", "dashlen", "225");
+ assertXPath(pDoc, "/metafile/line[1]", "dashlen", "528");
assertXPath(pDoc, "/metafile/line[1]", "dashcount", "1");
- assertXPath(pDoc, "/metafile/line[1]", "dotlen", "0");
+ assertXPath(pDoc, "/metafile/line[1]", "dotlen", "176");
assertXPath(pDoc, "/metafile/line[1]", "dotcount", "0");
- assertXPath(pDoc, "/metafile/line[1]", "distance", "100");
+ 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]", "dashlen", "528");
assertXPath(pDoc, "/metafile/line[2]", "dashcount", "0");
- assertXPath(pDoc, "/metafile/line[2]", "dotlen", "30");
+ assertXPath(pDoc, "/metafile/line[2]", "dotlen", "176");
assertXPath(pDoc, "/metafile/line[2]", "dotcount", "1");
- assertXPath(pDoc, "/metafile/line[2]", "distance", "50");
+ assertXPath(pDoc, "/metafile/line[2]", "distance", "176");
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]", "dashlen", "528");
assertXPath(pDoc, "/metafile/line[3]", "dashcount", "1");
- assertXPath(pDoc, "/metafile/line[3]", "dotlen", "30");
+ assertXPath(pDoc, "/metafile/line[3]", "dotlen", "176");
assertXPath(pDoc, "/metafile/line[3]", "dotcount", "1");
- assertXPath(pDoc, "/metafile/line[3]", "distance", "90");
+ assertXPath(pDoc, "/metafile/line[3]", "distance", "176");
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]", "dashlen", "528");
assertXPath(pDoc, "/metafile/line[4]", "dashcount", "1");
- assertXPath(pDoc, "/metafile/line[4]", "dotlen", "30");
+ assertXPath(pDoc, "/metafile/line[4]", "dotlen", "176");
assertXPath(pDoc, "/metafile/line[4]", "dotcount", "2");
- assertXPath(pDoc, "/metafile/line[4]", "distance", "50");
+ assertXPath(pDoc, "/metafile/line[4]", "distance", "176");
assertXPath(pDoc, "/metafile/line[4]", "join", "miter");
assertXPath(pDoc, "/metafile/line[4]", "cap", "butt");
};
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index 8c63027e869f..15845a0bd1b3 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -17,10 +17,12 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "winmtf.hxx"
#include <osl/endian.h>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <vcl/dibtools.hxx>
+
+#include "winmtf.hxx"
+
#include <memory>
#ifdef DBG_UTIL
@@ -912,37 +914,27 @@ bool EnhWMFReader::ReadEnhWMF()
aLineInfo.SetWidth( aSize.Width() );
bool bTransparent = false;
- switch( nStyle & 0xFF )
+ switch( nStyle & PS_STYLE_MASK )
{
case PS_DASHDOTDOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 2 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASHDOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 90 );
break;
case PS_DOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 0 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASH :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 0 );
- aLineInfo.SetDashLen( 225 );
- aLineInfo.SetDistance( 100 );
break;
case PS_NULL :
bTransparent = true;
@@ -1015,31 +1007,21 @@ bool EnhWMFReader::ReadEnhWMF()
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 2 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASHDOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 90 );
break;
case PS_DOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 0 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASH :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 0 );
- aLineInfo.SetDashLen( 225 );
- aLineInfo.SetDistance( 100 );
break;
case PS_NULL :
bTransparent = true;
diff --git a/vcl/source/filter/wmf/winmtf.cxx b/vcl/source/filter/wmf/winmtf.cxx
index 55601721ca5a..c5176296e5df 100644
--- a/vcl/source/filter/wmf/winmtf.cxx
+++ b/vcl/source/filter/wmf/winmtf.cxx
@@ -729,8 +729,16 @@ void WinMtfOutput::CreateObject( sal_Int32 nIndex, GDIObjectType eType, void* pS
{
WinMtfLineStyle* pLineStyle = static_cast<WinMtfLineStyle*>(pStyle);
Size aSize(pLineStyle->aLineInfo.GetWidth(), 0);
- aSize = ImplMap(aSize);
- pLineStyle->aLineInfo.SetWidth(aSize.Width());
+ pLineStyle->aLineInfo.SetWidth( ImplMap(aSize).Width() );
+
+ if ( pLineStyle->aLineInfo.GetStyle() == LINE_DASH )
+ {
+ aSize.Width() += 1;
+ long nDotLen = ImplMap( aSize ).Width();
+ pLineStyle->aLineInfo.SetDistance( nDotLen );
+ pLineStyle->aLineInfo.SetDotLen( nDotLen );
+ pLineStyle->aLineInfo.SetDashLen( nDotLen * 3 );
+ }
}
}
if ( (sal_uInt32)nIndex >= vGDIObj.size() )
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index 3ebcadbed7eb..245455d8e4a9 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -811,37 +811,28 @@ void WMFReader::ReadRecordParams( sal_uInt16 nFunc )
aLineInfo.SetWidth(nWidth);
bool bTransparent = false;
+
switch( nStyle & 0xFF )
{
case PS_DASHDOTDOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 2 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASHDOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDashLen( 150 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 90 );
break;
case PS_DOT :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 0 );
aLineInfo.SetDotCount( 1 );
- aLineInfo.SetDotLen( 30 );
- aLineInfo.SetDistance( 50 );
break;
case PS_DASH :
aLineInfo.SetStyle( LINE_DASH );
aLineInfo.SetDashCount( 1 );
aLineInfo.SetDotCount( 0 );
- aLineInfo.SetDashLen( 225 );
- aLineInfo.SetDistance( 100 );
break;
case PS_NULL :
bTransparent = true;