From 050b8e33604bb50d48a9a43f61c85baccb17ab1d Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 7 Jan 2012 01:00:31 +0100 Subject: GUI: Rework how the default localized font is managed. Now we set the default localized font to the "text_default" font of the currently active theme and default to the big GUI font in case none is specified properly. --- graphics/fontman.cpp | 64 ++++++++++++++++++++-------------------------------- graphics/fontman.h | 19 ++++++++-------- 2 files changed, 33 insertions(+), 50 deletions(-) (limited to 'graphics') diff --git a/graphics/fontman.cpp b/graphics/fontman.cpp index a10d27a2b0..9c7285ef2f 100644 --- a/graphics/fontman.cpp +++ b/graphics/fontman.cpp @@ -72,6 +72,20 @@ const struct { { 0, FontManager::kConsoleFont } }; +bool FontManager::setLocalizedFont(const Common::String &name) { + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + + // We only update the localized font in case the name is properly assigned + // to a font. + if (_fontMap.contains(lowercaseName) && _fontMap.getVal(lowercaseName) != 0) { + _localizedFontName = lowercaseName; + return true; + } else { + return false; + } +} + bool FontManager::assignFontToName(const Common::String &name, const Font *font) { Common::String lowercaseName = name; lowercaseName.toLowercase(); @@ -103,6 +117,11 @@ void FontManager::removeFontName(const Common::String &name) { Common::String lowercaseName = name; lowercaseName.toLowercase(); _fontMap.erase(lowercaseName); + + // In case the current localized font is removed, we fall back to the + // default font again. + if (_localizedFontName == lowercaseName) + _localizedFontName.clear(); } const Font *FontManager::getFontByName(const Common::String &name) const { @@ -126,51 +145,16 @@ const Font *FontManager::getFontByUsage(FontUsage usage) const { 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; - } -#ifdef USE_TRANSLATION - // Accept any other font that has the charset in its name - for (Common::HashMap::const_iterator it = _fontMap.begin() ; it != _fontMap.end() ; ++it) { - if (it->_key.contains(TransMan.getCurrentCharset())) - return it->_value; - } -#endif - // Fallback: return a non localized kGUIFont. - // Maybe we should return a null pointer instead? - return g_sysfont; - } + // By default use the big font as localized font + if (_localizedFontName.empty()) + return g_sysfont_big; + else + return _fontMap[_localizedFontName]; } 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; diff --git a/graphics/fontman.h b/graphics/fontman.h index 77ae508c16..e229860f24 100644 --- a/graphics/fontman.h +++ b/graphics/fontman.h @@ -42,6 +42,14 @@ public: kBigGUIFont = 3 }; + /** + * Sets the localized font name. + * + * @param name the name of the localized font. + * @return true when the font was present, false otherwise. + */ + bool setLocalizedFont(const Common::String &name); + /** * Retrieve a font object based on its 'name'. * @@ -96,22 +104,13 @@ public: //const Font *getFontBySize(int size???) const; -protected: - /** - * Get the name of the localized font for the given usage. There is no garanty that - * the font exists. If the usage is kLocalizedFont it returns an empty string. - * - * @param usage a FontUsage enum value indicating what the font will be used for. - * @return the name of a localized font or an empty string if no suitable font was found. - */ - Common::String getLocalizedFontNameByUsage(FontUsage usage) const; - private: friend class Common::Singleton; FontManager(); ~FontManager(); Common::HashMap _fontMap; + Common::String _localizedFontName; }; -- cgit v1.2.3