From 66fc8a9d5ae3eb7a2b0e95d300ef3b053931428f Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sun, 24 Mar 2013 09:29:55 +0000 Subject: [PATCH] [win32k] - Add a hackfix to ftGdiGetGlyphOutline to make it handle scaling more properly - Improves CORE-4657 svn path=/trunk/; revision=58599 --- reactos/win32ss/gdi/ntgdi/freetype.c | 33 +++++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/reactos/win32ss/gdi/ntgdi/freetype.c b/reactos/win32ss/gdi/ntgdi/freetype.c index 652f22f6f7f..abcf6b17bc0 100644 --- a/reactos/win32ss/gdi/ntgdi/freetype.c +++ b/reactos/win32ss/gdi/ntgdi/freetype.c @@ -1646,15 +1646,32 @@ ftGdiGetGlyphOutline( IntLockFreeType; /* Scaling transform */ - if (aveWidth) + /*if (aveWidth)*/ { - FT_Matrix scaleMat; - DPRINT("Scaling Trans!\n"); - scaleMat.xx = FT_FixedFromFloat(widthRatio); - scaleMat.xy = 0; - scaleMat.yx = 0; - scaleMat.yy = (1 << 16); - FT_Matrix_Multiply(&scaleMat, &transMat); + + FT_Matrix ftmatrix; + FLOATOBJ efTemp; + + PMATRIX pmx = DC_pmxWorldToDevice(dc); + + /* Create a freetype matrix, by converting to 16.16 fixpoint format */ + efTemp = pmx->efM11; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.xx = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM12; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.xy = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM21; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.yx = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM22; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.yy = FLOATOBJ_GetLong(&efTemp); + + FT_Matrix_Multiply(&ftmatrix, &transMat); needsTransform = TRUE; }