Module: wine Branch: stable Commit: 816124a2a5e0b7ba6b46d806cf3c2d323deda2ed URL: http://source.winehq.org/git/wine.git/?a=commit;h=816124a2a5e0b7ba6b46d806cf...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Wed Jul 28 17:07:09 2010 +0900
gdi32: Make sure that all the glyph metrics are transformed before caching them. (cherry picked from commit 213d84be157398dea1fb70782f6bf7decd4d452a)
---
dlls/gdi32/freetype.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 9d88211..532278c 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -4704,14 +4704,11 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, return GDI_ERROR; }
- left = (INT)(ft_face->glyph->metrics.horiBearingX) & -64; - right = (INT)((ft_face->glyph->metrics.horiBearingX + ft_face->glyph->metrics.width) + 63) & -64; - - adv = (INT)((ft_face->glyph->metrics.horiAdvance) + 63) >> 6; - lsb = left >> 6; - bbx = (right - left) >> 6; - if(!needsTransform) { + left = (INT)(ft_face->glyph->metrics.horiBearingX) & -64; + right = (INT)((ft_face->glyph->metrics.horiBearingX + ft_face->glyph->metrics.width) + 63) & -64; + adv = (INT)(ft_face->glyph->metrics.horiAdvance + 63) >> 6; + top = (ft_face->glyph->metrics.horiBearingY + 63) & -64; bottom = (ft_face->glyph->metrics.horiBearingY - ft_face->glyph->metrics.height) & -64; @@ -4720,6 +4717,9 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, } else { INT xc, yc; FT_Vector vec; + + left = right = 0; + for(xc = 0; xc < 2; xc++) { for(yc = 0; yc < 2; yc++) { vec.x = (ft_face->glyph->metrics.horiBearingX + @@ -4756,6 +4756,9 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, pFT_Vector_Transform(&vec, &transMatUnrotated); adv = (vec.x+63) >> 6; } + + lsb = left >> 6; + bbx = (right - left) >> 6; lpgm->gmBlackBoxX = (right - left) >> 6; lpgm->gmBlackBoxY = (top - bottom) >> 6; lpgm->gmptGlyphOrigin.x = left >> 6;