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)