Module: wine Branch: master Commit: f322f70a691320bc5500edcae256d09d90988502 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f322f70a691320bc5500edcae2...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Thu Aug 21 15:01:05 2008 +0900
gdi32: Avoid loading a bitmap if a glyph transformation is being requested.
---
dlls/gdi32/freetype.c | 36 ++++++++++++++++++------------------ 1 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index bb3c7d3..d569735 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -4356,17 +4356,6 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, if (!font->gm[original_index / GM_BLOCK_SIZE]) font->gm[original_index / GM_BLOCK_SIZE] = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, sizeof(GM) * GM_BLOCK_SIZE);
- if(font->orientation || (format != GGO_METRICS && format != GGO_BITMAP && format != WINE_GGO_GRAY16_BITMAP) || lpmat) - load_flags |= FT_LOAD_NO_BITMAP; - - err = pFT_Load_Glyph(ft_face, glyph_index, load_flags); - - if(err) { - WARN("FT_Load_Glyph on index %x returns %d\n", glyph_index, err); - LeaveCriticalSection( &freetype_cs ); - return GDI_ERROR; - } - /* Scaling factor */ if (font->aveWidth) { @@ -4380,13 +4369,6 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, else widthRatio = font->scale_y;
- 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; - /* Scaling transform */ if (widthRatio != 1.0 || font->scale_y != 1.0) { @@ -4454,6 +4436,24 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, needsTransform = TRUE; }
+ if (needsTransform || (format != GGO_METRICS && format != GGO_BITMAP && format != WINE_GGO_GRAY16_BITMAP)) + load_flags |= FT_LOAD_NO_BITMAP; + + err = pFT_Load_Glyph(ft_face, glyph_index, load_flags); + + if(err) { + WARN("FT_Load_Glyph on index %x returns %d\n", glyph_index, err); + LeaveCriticalSection( &freetype_cs ); + 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) { top = (ft_face->glyph->metrics.horiBearingY + 63) & -64; bottom = (ft_face->glyph->metrics.horiBearingY -