summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2011-01-14 16:39:41 +0000
committerfrosch <frosch@openttd.org>2011-01-14 16:39:41 +0000
commitfad00367aee9879e99be41647876096b7c18825c (patch)
tree9109d1816a4bcad84904a402059946b19d8a30b3
parent93ae848b0ad844ff597793e88b5f032f696c5361 (diff)
downloadopenttd-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.cpp20
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);