summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fontengine.cpp68
-rw-r--r--src/settings.cpp43
-rw-r--r--src/settings.h4
3 files changed, 100 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;
}
diff --git a/src/settings.cpp b/src/settings.cpp
index b4083264e..61f35e911 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -362,6 +362,18 @@ const SettingsEntry &Settings::getEntry(const std::string &name) const
}
+const SettingsEntry &Settings::getEntryDefault(const std::string &name) const
+{
+ MutexAutoLock lock(m_mutex);
+
+ SettingEntries::const_iterator n;
+ if ((n = m_defaults.find(name)) == m_defaults.end()) {
+ throw SettingNotFoundException("Setting [" + name + "] not found.");
+ }
+ return n->second;
+}
+
+
Settings *Settings::getGroup(const std::string &name) const
{
const SettingsEntry &entry = getEntry(name);
@@ -380,6 +392,15 @@ const std::string &Settings::get(const std::string &name) const
}
+const std::string &Settings::getDefault(const std::string &name) const
+{
+ const SettingsEntry &entry = getEntryDefault(name);
+ if (entry.is_group)
+ throw SettingNotFoundException("Setting [" + name + "] is a group.");
+ return entry.value;
+}
+
+
bool Settings::getBool(const std::string &name) const
{
return is_yes(get(name));
@@ -568,6 +589,17 @@ bool Settings::getEntryNoEx(const std::string &name, SettingsEntry &val) const
}
+bool Settings::getEntryDefaultNoEx(const std::string &name, SettingsEntry &val) const
+{
+ try {
+ val = getEntryDefault(name);
+ return true;
+ } catch (SettingNotFoundException &e) {
+ return false;
+ }
+}
+
+
bool Settings::getGroupNoEx(const std::string &name, Settings *&val) const
{
try {
@@ -590,6 +622,17 @@ bool Settings::getNoEx(const std::string &name, std::string &val) const
}
+bool Settings::getDefaultNoEx(const std::string &name, std::string &val) const
+{
+ try {
+ val = getDefault(name);
+ return true;
+ } catch (SettingNotFoundException &e) {
+ return false;
+ }
+}
+
+
bool Settings::getFlag(const std::string &name) const
{
try {
diff --git a/src/settings.h b/src/settings.h
index 8c4f6e559..a19c15a76 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -135,8 +135,10 @@ public:
***********/
const SettingsEntry &getEntry(const std::string &name) const;
+ const SettingsEntry &getEntryDefault(const std::string &name) const;
Settings *getGroup(const std::string &name) const;
const std::string &get(const std::string &name) const;
+ const std::string &getDefault(const std::string &name) const;
bool getBool(const std::string &name) const;
u16 getU16(const std::string &name) const;
s16 getS16(const std::string &name) const;
@@ -165,8 +167,10 @@ public:
***************************************/
bool getEntryNoEx(const std::string &name, SettingsEntry &val) const;
+ bool getEntryDefaultNoEx(const std::string &name, SettingsEntry &val) const;
bool getGroupNoEx(const std::string &name, Settings *&val) const;
bool getNoEx(const std::string &name, std::string &val) const;
+ bool getDefaultNoEx(const std::string &name, std::string &val) const;
bool getFlag(const std::string &name) const;
bool getU16NoEx(const std::string &name, u16 &val) const;
bool getS16NoEx(const std::string &name, s16 &val) const;