changeset 17052:5c5c1a23c651 draft

(svn r21789) -Fix [FS#4405]: When the font misses the fallback character '?', use the sprite font's '?' instead.
author frosch <frosch@openttd.org>
date Fri, 14 Jan 2011 16:39:41 +0000
parents dff31b533b77
children 250cc232b8ee
files src/fontcache.cpp
diffstat 1 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -1007,10 +1007,22 @@
 
 	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);