[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