openoffice-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject svn commit: r1419586 - in /openoffice/trunk/main/svtools/source/filter/wmf: enhwmf.cxx winmtf.cxx winmtf.hxx
Date Mon, 10 Dec 2012 17:08:59 GMT
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();



Mime
View raw message