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