Author: akhaldi
Date: Mon Jun  9 13:31:38 2014
New Revision: 63576
URL: 
http://svn.reactos.org/svn/reactos?rev=63576&view=rev
Log:
[WIN32K/FREETYPE]
* Consider current WorldTransform in ExtTextOutW.
* Brought to you by Manuel "Tarnyko" Bachmann. Fix improved by Timo Kreuzer and
me.
CORE-8306 #resolve #comment Fixed in r63576. Thanks!
Modified:
    trunk/reactos/win32ss/gdi/ntgdi/freetype.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/freetype.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/freetype…
==============================================================================
--- trunk/reactos/win32ss/gdi/ntgdi/freetype.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/ntgdi/freetype.c  [iso-8859-1] Mon Jun  9 13:31:38 2014
@@ -18,6 +18,8 @@
 #include <ftbitmap.h>
 #include <ftoutln.h>
 #include <ftwinfnt.h>
+
+#include <gdi/eng/floatobj.h>
 #define NDEBUG
 #include <debug.h>
@@ -3228,6 +3230,7 @@
     USHORT DxShift;
     PMATRIX pmxWorldToDevice;
     LONG fixAscender, fixDescender;
+    FLOATOBJ Scale;
     // TODO: Write test-cases to exactly match real Windows in different
     // bad parameters (e.g. does Windows check the DC or the RECT first?).
@@ -3671,8 +3674,13 @@
         }
         else
         {
-            TextLeft += Dx[i<<DxShift] << 6;
-             DPRINT("New TextLeft2: %I64d\n", TextLeft);
+            Scale = pdcattr->mxWorldToDevice.efM11;
+            if (_FLOATOBJ_Equal0(&Scale))
+                FLOATOBJ_Set1(&Scale);
+
+            FLOATOBJ_MulLong(&Scale, Dx[i<<DxShift] << 6); // do the
shift before multiplying to preserve precision
+            TextLeft += FLOATOBJ_GetLong(&Scale);
+            DPRINT("New TextLeft2: %I64d\n", TextLeft);
         }
         if (DxShift)