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)