Module: wine Branch: stable Commit: c30e4b8d6b1ef885776412ecf50fcb94e8bc7494 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c30e4b8d6b1ef885776412ecf5...
Author: Marcus Meissner marcus@jet.franken.de Date: Tue Jul 20 00:17:10 2010 +0200
gdi32: Rebuild font hash after changing the matrix. (cherry picked from commit 2f7ec73adde1a87f788eebcf66ec8dd16bf9109f)
---
dlls/gdi32/freetype.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index ddb3d24..9d88211 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -3780,12 +3780,23 @@ found: if(!face->scalable) { /* Windows uses integer scaling factors for bitmap fonts */ INT scale, scaled_height; + GdiFont *cachedfont;
/* FIXME: rotation of bitmap fonts is ignored */ height = abs(GDI_ROUND( (double)height * ret->font_desc.matrix.eM22 )); if (ret->aveWidth) ret->aveWidth = (double)ret->aveWidth * ret->font_desc.matrix.eM11; ret->font_desc.matrix.eM11 = ret->font_desc.matrix.eM22 = 1.0; + dcmat.eM11 = dcmat.eM22 = 1.0; + /* As we changed the matrix, we need to search the cache for the font again, + * otherwise we might explode the cache. */ + if((cachedfont = find_in_cache(hfont, &lf, &dcmat, can_use_bitmap)) != NULL) { + TRACE("Found cached font after non-scalable matrix rescale!\n"); + free_font( ret ); + LeaveCriticalSection( &freetype_cs ); + return cachedfont; + } + calc_hash(&ret->font_desc);
if (height != 0) height = diff; height += face->size.height;