[Libreoffice-commits] core.git: 2 commits - vcl/source
Andras Timar
andras.timar at collabora.com
Sun Jan 19 08:49:21 PST 2014
vcl/source/filter/wmf/enhwmf.cxx | 36 +++++++++++++++--------
vcl/source/filter/wmf/winmtf.cxx | 16 ----------
vcl/source/filter/wmf/winwmf.cxx | 60 +++++++++++++++++++++++++++++++--------
3 files changed, 73 insertions(+), 39 deletions(-)
New commits:
commit 09c722873b2d378d2d155f5f1dd7d8f3fb2012e9
Author: Andras Timar <andras.timar at collabora.com>
Date: Sun Jan 19 15:12:15 2014 +0100
EMF/WMF: fix rendering of pen styles (dash, dot, dashdot, dashdotdot)
Change-Id: I226bac370601b75f2589f7a7c5e8830746b31e2e
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index 2d15308..6ee6544 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -730,19 +730,37 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
aLineInfo.SetWidth( aSize.Width() );
sal_Bool bTransparent = sal_False;
- sal_uInt16 nDashCount = 0;
- sal_uInt16 nDotCount = 0;
switch( nStyle & 0xFF )
{
case PS_DASHDOTDOT :
- nDotCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 2 );
+ aLineInfo.SetDashLen( 150 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 50 );
+ break;
case PS_DASHDOT :
- nDashCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDashLen( 150 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 90 );
+ break;
case PS_DOT :
- nDotCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 0 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 50 );
break;
case PS_DASH :
- nDashCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 0 );
+ aLineInfo.SetDashLen( 225 );
+ aLineInfo.SetDistance( 100 );
break;
case PS_NULL :
bTransparent = sal_True;
@@ -779,12 +797,6 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
default :
aLineInfo.SetLineJoin ( basegfx::B2DLINEJOIN_NONE );
}
- if ( nDashCount | nDotCount )
- {
- aLineInfo.SetStyle( LINE_DASH );
- aLineInfo.SetDashCount( nDashCount );
- aLineInfo.SetDotCount( nDotCount );
- }
pOut->CreateObject( nIndex, GDI_PEN, new WinMtfLineStyle( ReadColor(), aLineInfo, bTransparent ) );
}
}
diff --git a/vcl/source/filter/wmf/winmtf.cxx b/vcl/source/filter/wmf/winmtf.cxx
index 1b204c5..78530a7 100644
--- a/vcl/source/filter/wmf/winmtf.cxx
+++ b/vcl/source/filter/wmf/winmtf.cxx
@@ -713,14 +713,6 @@ void WinMtfOutput::CreateObject( GDIObjectType eType, void* pStyle )
{
Size aSize( ((WinMtfLineStyle*)pStyle)->aLineInfo.GetWidth(), 0 );
((WinMtfLineStyle*)pStyle)->aLineInfo.SetWidth( ImplMap( aSize ).Width() );
- if ( ((WinMtfLineStyle*)pStyle)->aLineInfo.GetStyle() == LINE_DASH )
- {
- aSize.Width() += 1;
- long nDotLen = ImplMap( aSize ).Width();
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDistance( nDotLen );
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDotLen( nDotLen );
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDashLen( nDotLen * 4 );
- }
}
}
sal_uInt32 nIndex;
@@ -749,14 +741,6 @@ void WinMtfOutput::CreateObject( sal_Int32 nIndex, GDIObjectType eType, void* pS
{
Size aSize( ((WinMtfLineStyle*)pStyle)->aLineInfo.GetWidth(), 0 );
((WinMtfLineStyle*)pStyle)->aLineInfo.SetWidth( ImplMap( aSize ).Width() );
- if ( ((WinMtfLineStyle*)pStyle)->aLineInfo.GetStyle() == LINE_DASH )
- {
- aSize.Width() += 1;
- long nDotLen = ImplMap( aSize ).Width();
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDistance( nDotLen );
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDotLen( nDotLen );
- ((WinMtfLineStyle*)pStyle)->aLineInfo.SetDashLen( nDotLen * 4 );
- }
}
}
if ( (sal_uInt32)nIndex >= vGDIObj.size() )
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index 3a10fb2..378dc3c 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -749,19 +749,37 @@ void WMFReader::ReadRecordParams( sal_uInt16 nFunc )
aLineInfo.SetWidth( nWidth );
sal_Bool bTransparent = sal_False;
- sal_uInt16 nDashCount = 0;
- sal_uInt16 nDotCount = 0;
switch( nStyle & 0xFF )
{
case PS_DASHDOTDOT :
- nDotCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 2 );
+ aLineInfo.SetDashLen( 150 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 50 );
+ break;
case PS_DASHDOT :
- nDashCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDashLen( 150 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 90 );
+ break;
case PS_DOT :
- nDotCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 0 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDotLen( 30 );
+ aLineInfo.SetDistance( 50 );
break;
case PS_DASH :
- nDashCount++;
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetDashCount( 1 );
+ aLineInfo.SetDotCount( 0 );
+ aLineInfo.SetDashLen( 225 );
+ aLineInfo.SetDistance( 100 );
break;
case PS_NULL :
bTransparent = sal_True;
@@ -798,12 +816,6 @@ void WMFReader::ReadRecordParams( sal_uInt16 nFunc )
default :
aLineInfo.SetLineJoin ( basegfx::B2DLINEJOIN_NONE );
}
- if ( nDashCount | nDotCount )
- {
- aLineInfo.SetStyle( LINE_DASH );
- aLineInfo.SetDashCount( nDashCount );
- aLineInfo.SetDotCount( nDotCount );
- }
pOut->CreateObject( GDI_PEN, new WinMtfLineStyle( ReadColor(), aLineInfo, bTransparent ) );
}
break;
commit 31507aaceb86a6dd153f64cc773c241eb03ed6a7
Author: Andras Timar <andras.timar at collabora.com>
Date: Sun Jan 19 14:15:05 2014 +0100
WMF: parse line cap and line join
Change-Id: I5a19a724856938d5a0495ee1e454582238dbd3f0
diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx
index f3cfaf2..3a10fb2 100644
--- a/vcl/source/filter/wmf/winwmf.cxx
+++ b/vcl/source/filter/wmf/winwmf.cxx
@@ -751,7 +751,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++;
@@ -772,6 +772,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 );
More information about the Libreoffice-commits
mailing list