[Libreoffice-commits] .: Branch 'libreoffice-3-4' - svtools/source

Petr Mladek pmladek at kemper.freedesktop.org
Thu Apr 28 05:46:54 PDT 2011


 svtools/source/filter.vcl/wmf/winmtf.cxx |   21 +++++++++++++++++++++
 svtools/source/filter.vcl/wmf/winmtf.hxx |    3 +++
 svtools/source/filter.vcl/wmf/winwmf.cxx |    1 +
 3 files changed, 25 insertions(+)

New commits:
commit 4ee339eb6d9f7d6dfeb821275a3abceccec55f57
Author: Petr Mladek <pmladek at suse.cz>
Date:   Thu Apr 28 14:45:51 2011 +0200

    wmf-mm-text.diff: M_TEXT map mode support in wmf (bnc#417818)

diff --git a/svtools/source/filter.vcl/wmf/winmtf.cxx b/svtools/source/filter.vcl/wmf/winmtf.cxx
index 40635d9..cd3145d 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 0db1d65..fce8c1c 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 00bcd95..32b5351 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 );


More information about the Libreoffice-commits mailing list