diff options
author | Petr Mladek <pmladek@suse.cz> | 2011-04-28 14:45:51 +0200 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2011-04-28 14:45:51 +0200 |
commit | 22ce671eda3fdf1ca73af5fa6391f1fe6a3f87d3 (patch) | |
tree | a2affd015510de5eedf3975a7213295156d94392 /svtools | |
parent | i18nutil-glibc-braindamage-workaround.diff: build failure with glibc-2.4 (diff) | |
download | core-22ce671eda3fdf1ca73af5fa6391f1fe6a3f87d3.tar.gz core-22ce671eda3fdf1ca73af5fa6391f1fe6a3f87d3.zip |
wmf-mm-text.diff: M_TEXT map mode support in wmf (bnc#417818)
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/filter.vcl/wmf/winmtf.cxx | 21 | ||||
-rw-r--r-- | svtools/source/filter.vcl/wmf/winmtf.hxx | 3 | ||||
-rw-r--r-- | svtools/source/filter.vcl/wmf/winwmf.cxx | 1 |
3 files changed, 25 insertions, 0 deletions
diff --git a/svtools/source/filter.vcl/wmf/winmtf.cxx b/svtools/source/filter.vcl/wmf/winmtf.cxx index b0625567d5d6..9d4875d83a51 100644 --- a/svtools/source/filter.vcl/wmf/winmtf.cxx +++ b/svtools/source/filter.vcl/wmf/winmtf.cxx @@ -377,6 +377,14 @@ Point WinMtfOutput::ImplMap( const Point& rPt ) { switch( mnMapMode ) { + case MM_TEXT: + fX2 -= mnWinOrgX; + fY2 -= mnWinOrgY; + fX2 *= 2540.0/mnUnitsPerInch; + fY2 *= 2540.0/mnUnitsPerInch; + fX2 += mnDevOrgX; + fY2 += mnDevOrgY; + break; case MM_LOENGLISH : { fX2 -= mnWinOrgX; @@ -452,6 +460,10 @@ Size WinMtfOutput::ImplMap( const Size& rSz ) { switch( mnMapMode ) { + case MM_TEXT: + fWidth *= 2540.0/mnUnitsPerInch; + fHeight*= 2540.0/mnUnitsPerInch; + break; case MM_LOENGLISH : { fWidth *= 25.40; @@ -894,6 +906,7 @@ WinMtfOutput::WinMtfOutput( GDIMetaFile& rGDIMetaFile ) : mbComplexClip ( false ), mnGfxMode ( GM_COMPATIBLE ), mnMapMode ( MM_TEXT ), + mnUnitsPerInch ( 96 ), mnDevOrgX ( 0 ), mnDevOrgY ( 0 ), mnDevWidth ( 1 ), @@ -2014,6 +2027,14 @@ void WinMtfOutput::SetMapMode( sal_uInt32 nMapMode ) //----------------------------------------------------------------------------------- +void WinMtfOutput::SetUnitsPerInch( sal_uInt16 nUnitsPerInch ) +{ + if( nUnitsPerInch != 0 ) + mnUnitsPerInch = nUnitsPerInch; +} + +//----------------------------------------------------------------------------------- + void WinMtfOutput::SetWorldTransform( const XForm& rXForm ) { maXForm.eM11 = rXForm.eM11; diff --git a/svtools/source/filter.vcl/wmf/winmtf.hxx b/svtools/source/filter.vcl/wmf/winmtf.hxx index bd2293fe108b..d0b4e42cbed4 100644 --- a/svtools/source/filter.vcl/wmf/winmtf.hxx +++ b/svtools/source/filter.vcl/wmf/winmtf.hxx @@ -581,6 +581,8 @@ class WinMtfOutput sal_uInt32 mnGfxMode; sal_uInt32 mnMapMode; + sal_uInt16 mnUnitsPerInch; + XForm maXForm; sal_Int32 mnDevOrgX, mnDevOrgY; sal_Int32 mnDevWidth, mnDevHeight; @@ -627,6 +629,7 @@ class WinMtfOutput sal_uInt32 GetMapMode() const { return mnMapMode; }; void SetMapMode( sal_uInt32 mnMapMode ); + void SetUnitsPerInch( sal_uInt16 nUnitsPerInch ); void SetWorldTransform( const XForm& rXForm ); void ModifyWorldTransform( const XForm& rXForm, sal_uInt32 nMode ); diff --git a/svtools/source/filter.vcl/wmf/winwmf.cxx b/svtools/source/filter.vcl/wmf/winwmf.cxx index c7d33a824adf..095b1c45eb68 100644 --- a/svtools/source/filter.vcl/wmf/winwmf.cxx +++ b/svtools/source/filter.vcl/wmf/winwmf.cxx @@ -1036,6 +1036,7 @@ sal_Bool WMFReader::ReadHeader() pWMF->Seek( nStrmPos ); } + pOut->SetUnitsPerInch( nUnitsPerInch ); pOut->SetWinOrg( aPlaceableBound.TopLeft() ); aWMFSize = Size( labs( aPlaceableBound.GetWidth() ), labs( aPlaceableBound.GetHeight() ) ); pOut->SetWinExt( aWMFSize ); |