gdi32: Avoid loading a bitmap if a glyph transformation is being requested.

This commit is contained in:
Dmitry Timoshkov 2008-08-21 15:01:05 +09:00 committed by Alexandre Julliard
parent c5536ef1ae
commit f322f70a69
1 changed files with 18 additions and 18 deletions

View File

@ -4356,17 +4356,6 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
if (!font->gm[original_index / GM_BLOCK_SIZE]) 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); 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 */ /* Scaling factor */
if (font->aveWidth) if (font->aveWidth)
{ {
@ -4380,13 +4369,6 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
else else
widthRatio = font->scale_y; 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 */ /* Scaling transform */
if (widthRatio != 1.0 || font->scale_y != 1.0) if (widthRatio != 1.0 || font->scale_y != 1.0)
{ {
@ -4454,6 +4436,24 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
needsTransform = TRUE; 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) { if(!needsTransform) {
top = (ft_face->glyph->metrics.horiBearingY + 63) & -64; top = (ft_face->glyph->metrics.horiBearingY + 63) & -64;
bottom = (ft_face->glyph->metrics.horiBearingY - bottom = (ft_face->glyph->metrics.horiBearingY -