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();