summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndras Timar <andras.timar@collabora.com>2014-01-06 19:23:01 +0100
committerAndras Timar <andras.timar@collabora.com>2014-04-22 23:12:13 +0200
commite0feba8b05d4bf6a93ca1b250af2e08afbd5e680 (patch)
treed496441a5b84252cfb8510063889b1b9fe678e58
parent49e5bdc10ca7e1c7fde0353f98cb454c1b22c8e7 (diff)
EMF/WMF: parse line cap and line join
Change-Id: I081ae9c24e48912631dcfe4aba8a06ff2680aaf5
-rw-r--r--vcl/source/filter/wmf/enhwmf.cxx28
-rw-r--r--vcl/source/filter/wmf/winwmf.cxx28
2 files changed, 54 insertions, 2 deletions
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index de8b7801e184..813e1e6082f0 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -730,7 +730,7 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
sal_Bool bTransparent = sal_False;
sal_uInt16 nDashCount = 0;
sal_uInt16 nDotCount = 0;
- switch( nStyle )
+ switch( nStyle & 0xFF )
{
case PS_DASHDOTDOT :
nDotCount++;
@@ -751,6 +751,32 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
case PS_SOLID :
aLineInfo.SetStyle( LINE_SOLID );
}
+ switch( nStyle & 0xF00 )
+ {
+ case PS_ENDCAP_ROUND :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_ROUND );
+ break;
+ case PS_ENDCAP_SQUARE :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_SQUARE );
+ break;
+ case PS_ENDCAP_FLAT :
+ default :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_BUTT );
+ }
+ switch( nStyle & 0xF000 )
+ {
+ 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 );
+ }
if ( nDashCount | nDotCount )
{
aLineInfo.SetStyle( LINE_DASH );
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index 6c5093dadc51..bef489f60327 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -750,7 +750,7 @@ void WMFReader::ReadRecordParams( sal_uInt16 nFunc )
sal_Bool bTransparent = sal_False;
sal_uInt16 nDashCount = 0;
sal_uInt16 nDotCount = 0;
- switch( nStyle )
+ switch( nStyle & 0xFF )
{
case PS_DASHDOTDOT :
nDotCount++;
@@ -771,6 +771,32 @@ void WMFReader::ReadRecordParams( sal_uInt16 nFunc )
case PS_SOLID :
aLineInfo.SetStyle( LINE_SOLID );
}
+ switch( nStyle & 0xF00 )
+ {
+ case PS_ENDCAP_ROUND :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_ROUND );
+ break;
+ case PS_ENDCAP_SQUARE :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_SQUARE );
+ break;
+ case PS_ENDCAP_FLAT :
+ default :
+ aLineInfo.SetLineCap( com::sun::star::drawing::LineCap_BUTT );
+ }
+ switch( nStyle & 0xF000 )
+ {
+ 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 );
+ }
if ( nDashCount | nDotCount )
{
aLineInfo.SetStyle( LINE_DASH );