diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index e172c5c537..f036d20b1f 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -5556,35 +5556,32 @@ GreExtTextOutW( goto Cleanup; } - /* NOTE: Don't trust face->size->metrics.ascender and descender values. */ if (dc->pdcattr->iGraphicsMode == GM_ADVANCED) { pmxWorldToDevice = DC_pmxWorldToDevice(dc); FtSetCoordinateTransform(face, pmxWorldToDevice); - fixAscender = ScaleLong(FontGDI->tmAscent, &pmxWorldToDevice->efM22) << 6; - fixDescender = ScaleLong(FontGDI->tmDescent, &pmxWorldToDevice->efM22) << 6; + fixAscender = ScaleLong(face->size->metrics.ascender, &pmxWorldToDevice->efM22); + fixDescender = ScaleLong(face->size->metrics.descender, &pmxWorldToDevice->efM22); } else { pmxWorldToDevice = (PMATRIX)&gmxWorldToDeviceDefault; FtSetCoordinateTransform(face, pmxWorldToDevice); - fixAscender = FontGDI->tmAscent << 6; - fixDescender = FontGDI->tmDescent << 6; + fixAscender = face->size->metrics.ascender; + fixDescender = face->size->metrics.descender; } /* * Process the vertical alignment and determine the yoff. */ -#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM) - if ((pdcattr->lTextAlign & VALIGN_MASK) == TA_BASELINE) + if (pdcattr->lTextAlign & TA_BASELINE) yoff = 0; - else if ((pdcattr->lTextAlign & VALIGN_MASK) == TA_BOTTOM) - yoff = -(fixDescender >> 6); + else if (pdcattr->lTextAlign & TA_BOTTOM) + yoff = -fixDescender >> 6; else /* TA_TOP */ yoff = fixAscender >> 6; -#undef VALIGN_MASK use_kerning = FT_HAS_KERNING(face); previous = 0; @@ -5755,7 +5752,7 @@ GreExtTextOutW( DestRect.left = BackgroundLeft; DestRect.right = (TextLeft + (realglyph->root.advance.x >> 10) + 32) >> 6; DestRect.top = TextTop + yoff - ((fixAscender + 32) >> 6); - DestRect.bottom = DestRect.top + ((fixAscender + fixDescender) >> 6); + DestRect.bottom = TextTop + yoff + ((32 - fixDescender) >> 6); MouseSafetyOnDrawStart(dc->ppdev, DestRect.left, DestRect.top, DestRect.right, DestRect.bottom); if (dc->fs & (DC_ACCUM_APP|DC_ACCUM_WMGR)) { @@ -5892,7 +5889,7 @@ GreExtTextOutW( DestRect.left = BackgroundLeft; DestRect.right = (TextLeft + (realglyph->root.advance.x >> 10) + 32) >> 6; DestRect.top = TextTop + yoff - ((fixAscender + 32) >> 6); - DestRect.bottom = DestRect.top + ((fixAscender + fixDescender) >> 6); + DestRect.bottom = TextTop + yoff + ((32 - fixDescender) >> 6); if (dc->dctype == DCTYPE_DIRECT) MouseSafetyOnDrawStart(dc->ppdev, DestRect.left, DestRect.top, DestRect.right, DestRect.bottom);