summaryrefslogtreecommitdiff
path: root/src/fontengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/fontengine.cpp')
-rw-r--r--src/fontengine.cpp68
1 files changed, 53 insertions, 15 deletions
diff --git a/src/fontengine.cpp b/src/fontengine.cpp
index da327c3f6..8eaf53c9f 100644
--- a/src/fontengine.cpp
+++ b/src/fontengine.cpp
@@ -341,32 +341,70 @@ void FontEngine::initFont(unsigned int basesize, FontMode mode)
font_path.c_str(), size, true, true, font_shadow,
font_shadow_alpha);
- if (font != NULL) {
+ if (font) {
m_font_cache[mode][basesize] = font;
return;
}
- // try fallback font
- errorstream << "FontEngine: failed to load: " << font_path << ", trying to fall back "
- "to fallback font" << std::endl;
+ if (font_config_prefix == "mono_") {
+ const std::string &mono_font_path = m_settings->getDefault("mono_font_path");
- font_path = g_settings->get(font_config_prefix + "fallback_font_path");
+ if (font_path != mono_font_path) {
+ // try original mono font
+ errorstream << "FontEngine: failed to load custom mono "
+ "font: " << font_path << ", trying to fall back to "
+ "original mono font" << std::endl;
- font = gui::CGUITTFont::createTTFont(m_env,
- font_path.c_str(), size, true, true, font_shadow,
- font_shadow_alpha);
+ font = gui::CGUITTFont::createTTFont(m_env,
+ mono_font_path.c_str(), size, true, true,
+ font_shadow, font_shadow_alpha);
- if (font != NULL) {
- m_font_cache[mode][basesize] = font;
- return;
+ if (font) {
+ m_font_cache[mode][basesize] = font;
+ return;
+ }
+ }
+ } else {
+ // try fallback font
+ errorstream << "FontEngine: failed to load: " << font_path <<
+ ", trying to fall back to fallback font" << std::endl;
+
+ font_path = g_settings->get(font_config_prefix + "fallback_font_path");
+
+ font = gui::CGUITTFont::createTTFont(m_env,
+ font_path.c_str(), size, true, true, font_shadow,
+ font_shadow_alpha);
+
+ if (font) {
+ m_font_cache[mode][basesize] = font;
+ return;
+ }
+
+ const std::string &fallback_font_path = m_settings->getDefault("fallback_font_path");
+
+ if (font_path != fallback_font_path) {
+ // try original fallback font
+ errorstream << "FontEngine: failed to load custom fallback "
+ "font: " << font_path << ", trying to fall back to "
+ "original fallback font" << std::endl;
+
+ font = gui::CGUITTFont::createTTFont(m_env,
+ fallback_font_path.c_str(), size, true, true,
+ font_shadow, font_shadow_alpha);
+
+ if (font) {
+ m_font_cache[mode][basesize] = font;
+ return;
+ }
+ }
}
// give up
errorstream << "FontEngine: failed to load freetype font: "
<< font_path << std::endl;
- errorstream << "minetest can not continue without a valid font. Please correct "
- "the 'font_path' setting or install the font file in the proper "
- "location" << std::endl;
+ errorstream << "minetest can not continue without a valid font. "
+ "Please correct the 'font_path' setting or install the font "
+ "file in the proper location" << std::endl;
abort();
}
#endif
@@ -468,7 +506,7 @@ void FontEngine::initSimpleFont(unsigned int basesize, FontMode mode)
}
}
- if (font != NULL) {
+ if (font) {
font->grab();
m_font_cache[mode][basesize] = font;
}