diff options
author | frosch <frosch@openttd.org> | 2011-01-14 16:39:41 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2011-01-14 16:39:41 +0000 |
commit | fad00367aee9879e99be41647876096b7c18825c (patch) | |
tree | 9109d1816a4bcad84904a402059946b19d8a30b3 | |
parent | 93ae848b0ad844ff597793e88b5f032f696c5361 (diff) | |
download | openttd-fad00367aee9879e99be41647876096b7c18825c.tar.xz |
(svn r21789) -Fix [FS#4405]: When the font misses the fallback character '?', use the sprite font's '?' instead.
-rw-r--r-- | src/fontcache.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/fontcache.cpp b/src/fontcache.cpp index a9dbb2a65..b279c3463 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -1007,10 +1007,22 @@ const Sprite *GetGlyph(FontSize size, WChar key) FT_UInt glyph_index = FT_Get_Char_Index(face, key); if (glyph_index == 0) { - GetGlyph(size, '?'); - glyph = GetGlyphPtr(size, '?'); - SetGlyphPtr(size, key, glyph, true); - return glyph->sprite; + if (key == '?') { + /* The font misses the '?' character. Use sprite font. */ + SpriteID sprite = GetUnicodeGlyph(size, key); + Sprite *spr = (Sprite*)GetRawSprite(sprite, ST_FONT, AllocateFont); + assert(spr != NULL); + new_glyph.sprite = spr; + new_glyph.width = spr->width + (size != FS_NORMAL); + SetGlyphPtr(size, key, &new_glyph, false); + return new_glyph.sprite; + } else { + /* Use '?' for missing characters. */ + GetGlyph(size, '?'); + glyph = GetGlyphPtr(size, '?'); + SetGlyphPtr(size, key, glyph, true); + return glyph->sprite; + } } FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); FT_Render_Glyph(face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO); |