[1/2] gdi32: Avoid loading a bitmap if a glyph transformation is being requested

Dmitry Timoshkov dmitry at codeweavers.com
Thu Aug 21 01:01:05 CDT 2008


Hello,

this patch makes GetGlyphOutline ignore bitmaps embedded into some outline
fonts (like Wine Tahoma) when a glyph transformation is being requested.

Changelog:
    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 -
-- 
1.6.0






More information about the wine-patches mailing list