diff options
author | Auke Kok <sofar@foo-projects.org> | 2017-02-18 11:40:37 -0800 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2017-03-05 09:46:52 +0000 |
commit | f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913 (patch) | |
tree | 6612bfd7de35fbc2e2df263f35045e5f18491e86 | |
parent | 0a6e53bd31d3905b091dd91c9f284288e503fa48 (diff) | |
download | minetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.tar.gz minetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.tar.bz2 minetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.zip |
Font: attempt fallback font, abort if no fonts found.
If you happen to have a font_path setting that is incorrect,
minetest will just attempt to start the gui without a valid
font which leads to a segfault later on.
We can attempt to load the fallback font path fairly easy,
but if that fails we should give up with a proper error message
and not a weird segfault later. This forces an abort() if
the fallback fails as well, and prints a useful error
message to the console.
-rw-r--r-- | src/fontengine.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/fontengine.cpp b/src/fontengine.cpp index 55ff001e7..da327c3f6 100644 --- a/src/fontengine.cpp +++ b/src/fontengine.cpp @@ -343,11 +343,31 @@ void FontEngine::initFont(unsigned int basesize, FontMode mode) if (font != NULL) { m_font_cache[mode][basesize] = font; + return; } - else { - errorstream << "FontEngine: failed to load freetype font: " - << font_path << std::endl; + + // 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 != NULL) { + 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; + abort(); } #endif } |