diff options
Diffstat (limited to 'graphics/fontman.cpp')
-rw-r--r-- | graphics/fontman.cpp | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/graphics/fontman.cpp b/graphics/fontman.cpp index 27fe21ab97..6f1d282d54 100644 --- a/graphics/fontman.cpp +++ b/graphics/fontman.cpp @@ -68,14 +68,29 @@ const struct { { 0, FontManager::kConsoleFont } }; +bool FontManager::assignFontToName(const Common::String &name, const Font *font) { + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + _fontMap[lowercaseName] = font; + return true; +} + +void FontManager::removeFontName(const Common::String &name) { + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + _fontMap.erase(lowercaseName); +} + const Font *FontManager::getFontByName(const Common::String &name) const { for (int i = 0; builtinFontNames[i].name; i++) if (!scumm_stricmp(name.c_str(), builtinFontNames[i].name)) return getFontByUsage(builtinFontNames[i].id); - if (!_fontMap.contains(name)) + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + if (!_fontMap.contains(lowercaseName)) return 0; - return _fontMap[name]; + return _fontMap[lowercaseName]; } const Font *FontManager::getFontByUsage(FontUsage usage) const { @@ -86,11 +101,50 @@ const Font *FontManager::getFontByUsage(FontUsage usage) const { return g_sysfont; case kBigGUIFont: return g_sysfont_big; + case kLocalizedFont: + { + // First try to find a kBigGUIFont + Common::String fontName = getLocalizedFontNameByUsage(kBigGUIFont); + if (!fontName.empty()) { + const Font *font = getFontByName(fontName); + if (font) + return font; + } + // Try kGUIFont + fontName = getLocalizedFontNameByUsage(kGUIFont); + if (!fontName.empty()) { + const Font *font = getFontByName(fontName); + if (font) + return font; + } + // Accept any other font that has the charset in its name + for (Common::HashMap<Common::String, const Font *>::const_iterator it = _fontMap.begin() ; it != _fontMap.end() ; ++it) { + if (it->_key.contains(TransMan.getCurrentCharset())) + return it->_value; + } + // Fallback: return a non localized kGUIFont. + // Maybe we should return a null pointer instead? + return g_sysfont; + } } return 0; } +Common::String FontManager::getLocalizedFontNameByUsage(FontUsage usage) const { + // We look for a name that matches the usage and that ends in .bdf. + // It should also not contain "-ascii" or "-iso-" in its name. + // We take the first name that matches. + for (int i = 0; builtinFontNames[i].name; i++) { + if (builtinFontNames[i].id == usage) { + Common::String fontName(builtinFontNames[i].name); + if (!fontName.contains("-ascii") && !fontName.contains("-iso-") && fontName.contains(".bdf")) + return genLocalizedFontFilename(fontName); + } + } + return Common::String(); +} + Common::String FontManager::genLocalizedFontFilename(const Common::String &filename) const { #ifndef USE_TRANSLATION return filename; |