Author: alg
Date: Mon Dec 10 17:08:58 2012
New Revision: 1419586

URL: http://svn.apache.org/viewvc?rev=1419586&view=rev
Log:
#121382# Corrected size handling including font size handling for EMF/WMF 
imports

Modified:
    openoffice/trunk/main/svtools/source/filter/wmf/enhwmf.cxx
    openoffice/trunk/main/svtools/source/filter/wmf/winmtf.cxx
    openoffice/trunk/main/svtools/source/filter/wmf/winmtf.hxx

Modified: openoffice/trunk/main/svtools/source/filter/wmf/enhwmf.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/svtools/source/filter/wmf/enhwmf.cxx?rev=1419586&r1=1419585&r2=1419586&view=diff
==============================================================================
--- openoffice/trunk/main/svtools/source/filter/wmf/enhwmf.cxx (original)
+++ openoffice/trunk/main/svtools/source/filter/wmf/enhwmf.cxx Mon Dec 10 
17:08:58 2012
@@ -26,6 +26,7 @@
 
 #include "winmtf.hxx"
 #include <osl/endian.h>
+#include <basegfx/matrix/b2dhommatrix.hxx>
 
 //=========================== GDI-Array ===================================
 
@@ -1021,6 +1022,16 @@ sal_Bool EnhWMFReader::ReadEnhWMF()
                                                lfFaceName[ i ] = nChar;
                                        }
                                        aLogFont.alfFaceName = UniString( 
lfFaceName );
+
+                    // #121382# Need to apply WorldTransform to 
FontHeight/Width; this should be completely
+                    // chnaged to basegfx::B2DHomMatrix instead of 'struct 
XForm', but not now due to time
+                    // constraints and dangers
+                    const XForm& rXF = pOut->GetWorldTransform();
+                    const basegfx::B2DHomMatrix aWT(rXF.eM11, rXF.eM21, 
rXF.eDx, rXF.eM12, rXF.eM22, rXF.eDy);
+                    const basegfx::B2DVector aTransVec(aWT * 
basegfx::B2DVector(aLogFont.lfWidth, aLogFont.lfHeight));
+                    aLogFont.lfWidth = aTransVec.getX();
+                    aLogFont.lfHeight = aTransVec.getY();
+
                                        pOut->CreateObject( nIndex, GDI_FONT, 
new WinMtfFontStyle( aLogFont ) );
                                }
                        }

Modified: openoffice/trunk/main/svtools/source/filter/wmf/winmtf.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/svtools/source/filter/wmf/winmtf.cxx?rev=1419586&r1=1419585&r2=1419586&view=diff
==============================================================================
--- openoffice/trunk/main/svtools/source/filter/wmf/winmtf.cxx (original)
+++ openoffice/trunk/main/svtools/source/filter/wmf/winmtf.cxx Mon Dec 10 
17:08:58 2012
@@ -492,8 +492,9 @@ Size WinMtfOutput::ImplMap( const Size& 
 {
        if ( mnWinExtX && mnWinExtY )
        {
-               double fWidth = rSz.Width() * maXForm.eM11;
-               double fHeight = rSz.Height() * maXForm.eM22;
+        // #121382# apply the whole WorldTransform, else a rotation will be 
misinterpreted
+               double fWidth = rSz.Width() * maXForm.eM11 + rSz.Height() * 
maXForm.eM21;
+               double fHeight = rSz.Width() * maXForm.eM12 + rSz.Height() * 
maXForm.eM22;
 
                if ( mnGfxMode == GM_COMPATIBLE )
                {
@@ -1476,7 +1477,10 @@ void WinMtfOutput::DrawText( Point& rPos
 
                for( i = 0, nSum = 0; i < nLen; i++ )
                {
-                       sal_Int32 nTemp = ImplMap( Size( pDXArry[ i ], 0 ) 
).Width();
+            // #121382# Map DXArray using WorldTransform
+            const Size aSize(ImplMap(Size( pDXArry[i], 0)));
+            const basegfx::B2DVector aVector(aSize.Width(), aSize.Height());
+            const sal_Int32 nTemp(basegfx::fround(aVector.getLength()));
                        nSum += nTemp;
                        pDXArry[ i ] = nSum;
                }

Modified: openoffice/trunk/main/svtools/source/filter/wmf/winmtf.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/svtools/source/filter/wmf/winmtf.hxx?rev=1419586&r1=1419585&r2=1419586&view=diff
==============================================================================
--- openoffice/trunk/main/svtools/source/filter/wmf/winmtf.hxx (original)
+++ openoffice/trunk/main/svtools/source/filter/wmf/winmtf.hxx Mon Dec 10 
17:08:58 2012
@@ -614,6 +614,7 @@ class WinMtfOutput
                sal_uInt32                      GetMapMode() const { return 
mnMapMode; };
         void                SetMapMode( sal_uInt32 mnMapMode );
                void                            SetWorldTransform( const XForm& 
rXForm );
+        const XForm& GetWorldTransform() const { return maXForm; }
                void                            ModifyWorldTransform( const 
XForm& rXForm, sal_uInt32 nMode );
 
                void                            Push();


Reply via email to