]> git.lizzy.rs Git - minetest.git/commitdiff
Settings: Purge getDefault, clean FontEngine
authorSmallJoker <mk939@ymail.com>
Sun, 29 Nov 2020 16:56:25 +0000 (17:56 +0100)
committersfan5 <sfan5@live.de>
Fri, 29 Jan 2021 16:32:35 +0000 (17:32 +0100)
src/client/clientlauncher.cpp
src/client/fontengine.cpp
src/client/fontengine.h
src/main.cpp
src/script/scripting_mainmenu.cpp
src/settings.cpp
src/settings.h
src/unittest/test_settings.cpp

index 7245f29f09caa01aacdfb62974c4cd19749a09a0..2bb0bc385f80e028c83bd2571a2b97684afe9433 100644 (file)
@@ -175,7 +175,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
                }
        }
 #endif
-       g_fontengine = new FontEngine(g_settings, guienv);
+       g_fontengine = new FontEngine(guienv);
        FATAL_ERROR_IF(g_fontengine == NULL, "Font engine creation failed.");
 
 #if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2
index a55420846a74c576150ba3f19d2d200009f63b18..47218c0d9845d5c8e4afcd25d979ab2bd31cacda 100644 (file)
@@ -42,8 +42,7 @@ static void font_setting_changed(const std::string &name, void *userdata)
 }
 
 /******************************************************************************/
-FontEngine::FontEngine(Settings* main_settings, gui::IGUIEnvironment* env) :
-       m_settings(main_settings),
+FontEngine::FontEngine(gui::IGUIEnvironment* env) :
        m_env(env)
 {
 
@@ -51,34 +50,34 @@ FontEngine::FontEngine(Settings* main_settings, gui::IGUIEnvironment* env) :
                i = (FontMode) FONT_SIZE_UNSPECIFIED;
        }
 
-       assert(m_settings != NULL); // pre-condition
+       assert(g_settings != NULL); // pre-condition
        assert(m_env != NULL); // pre-condition
        assert(m_env->getSkin() != NULL); // pre-condition
 
        readSettings();
 
        if (m_currentMode == FM_Standard) {
-               m_settings->registerChangedCallback("font_size", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_bold", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_italic", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_path", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_path_bold", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_path_italic", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_size", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_bold", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_italic", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_path", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_path_bold", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_path_italic", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
        }
        else if (m_currentMode == FM_Fallback) {
-               m_settings->registerChangedCallback("fallback_font_size", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("fallback_font_shadow", font_setting_changed, NULL);
-               m_settings->registerChangedCallback("fallback_font_shadow_alpha", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("fallback_font_size", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("fallback_font_shadow", font_setting_changed, NULL);
+               g_settings->registerChangedCallback("fallback_font_shadow_alpha", font_setting_changed, NULL);
        }
 
-       m_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
-       m_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
-       m_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
-       m_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
+       g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
+       g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
+       g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
+       g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
 }
 
 /******************************************************************************/
@@ -205,9 +204,9 @@ unsigned int FontEngine::getFontSize(FontMode mode)
 void FontEngine::readSettings()
 {
        if (USE_FREETYPE && g_settings->getBool("freetype")) {
-               m_default_size[FM_Standard] = m_settings->getU16("font_size");
-               m_default_size[FM_Fallback] = m_settings->getU16("fallback_font_size");
-               m_default_size[FM_Mono]     = m_settings->getU16("mono_font_size");
+               m_default_size[FM_Standard] = g_settings->getU16("font_size");
+               m_default_size[FM_Fallback] = g_settings->getU16("fallback_font_size");
+               m_default_size[FM_Mono]     = g_settings->getU16("mono_font_size");
 
                /*~ DO NOT TRANSLATE THIS LITERALLY!
                This is a special string. Put either "no" or "yes"
@@ -220,15 +219,15 @@ void FontEngine::readSettings()
                m_currentMode = is_yes(gettext("needs_fallback_font")) ?
                                FM_Fallback : FM_Standard;
 
-               m_default_bold = m_settings->getBool("font_bold");
-               m_default_italic = m_settings->getBool("font_italic");
+               m_default_bold = g_settings->getBool("font_bold");
+               m_default_italic = g_settings->getBool("font_italic");
 
        } else {
                m_currentMode = FM_Simple;
        }
 
-       m_default_size[FM_Simple]       = m_settings->getU16("font_size");
-       m_default_size[FM_SimpleMono]   = m_settings->getU16("mono_font_size");
+       m_default_size[FM_Simple]       = g_settings->getU16("font_size");
+       m_default_size[FM_SimpleMono]   = g_settings->getU16("mono_font_size");
 
        cleanCache();
        updateFontCache();
@@ -244,7 +243,7 @@ void FontEngine::updateSkin()
                m_env->getSkin()->setFont(font);
        else
                errorstream << "FontEngine: Default font file: " <<
-                               "\n\t\"" << m_settings->get("font_path") << "\"" <<
+                               "\n\t\"" << g_settings->get("font_path") << "\"" <<
                                "\n\trequired for current screen configuration was not found" <<
                                " or was invalid file format." <<
                                "\n\tUsing irrlicht default font." << std::endl;
@@ -292,7 +291,7 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
                setting_suffix.append("_italic");
 
        u32 size = std::floor(RenderingEngine::getDisplayDensity() *
-                       m_settings->getFloat("gui_scaling") * spec.size);
+                       g_settings->getFloat("gui_scaling") * spec.size);
 
        if (size == 0) {
                errorstream << "FontEngine: attempt to use font size 0" << std::endl;
@@ -311,8 +310,8 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
 
        std::string fallback_settings[] = {
                wanted_font_path,
-               m_settings->get("fallback_font_path"),
-               m_settings->getDefault(setting_prefix + "font_path")
+               g_settings->get("fallback_font_path"),
+               Settings::getLayer(SL_DEFAULTS)->get(setting_prefix + "font_path")
        };
 
 #if USE_FREETYPE
@@ -346,7 +345,7 @@ gui::IGUIFont *FontEngine::initSimpleFont(const FontSpec &spec)
        assert(spec.mode == FM_Simple || spec.mode == FM_SimpleMono);
        assert(spec.size != FONT_SIZE_UNSPECIFIED);
 
-       const std::string &font_path = m_settings->get(
+       const std::string &font_path = g_settings->get(
                        (spec.mode == FM_SimpleMono) ? "mono_font_path" : "font_path");
 
        size_t pos_dot = font_path.find_last_of('.');
@@ -364,7 +363,7 @@ gui::IGUIFont *FontEngine::initSimpleFont(const FontSpec &spec)
 
        u32 size = std::floor(
                        RenderingEngine::getDisplayDensity() *
-                       m_settings->getFloat("gui_scaling") *
+                       g_settings->getFloat("gui_scaling") *
                        spec.size);
 
        irr::gui::IGUIFont *font = nullptr;
index d62e9b8efb2573d1d0fd60148c044910eee3f1f7..e27ef60e9ea7fe5fce02c2ba2a21b050afdea506 100644 (file)
@@ -62,7 +62,7 @@ class FontEngine
 {
 public:
 
-       FontEngine(Settings* main_settings, gui::IGUIEnvironment* env);
+       FontEngine(gui::IGUIEnvironment* env);
 
        ~FontEngine();
 
@@ -128,9 +128,6 @@ class FontEngine
        /** get font size for a specific mode */
        unsigned int getFontSize(FontMode mode);
 
-       /** initialize font engine */
-       void initialize(Settings* main_settings, gui::IGUIEnvironment* env);
-
        /** update internal parameters from settings */
        void readSettings();
 
@@ -150,9 +147,6 @@ class FontEngine
        /** clean cache */
        void cleanCache();
 
-       /** pointer to settings for registering callbacks or reading config */
-       Settings* m_settings = nullptr;
-
        /** pointer to irrlicht gui environment */
        gui::IGUIEnvironment* m_env = nullptr;
 
index 57768dbb24d4cce1ca5e7ddbb4dde98191f7a003..39b441d2c4b1d0879f6d1cf4abacd6852dd50a06 100644 (file)
@@ -527,7 +527,6 @@ static bool read_config_file(const Settings &cmd_args)
        // Path of configuration file in use
        sanity_check(g_settings_path == "");    // Sanity check
 
-
        if (cmd_args.exists("config")) {
                bool r = g_settings->readConfigFile(cmd_args.get("config").c_str());
                if (!r) {
index 9b377366e6fbfddd881c9f8fa5f6bd4584bf109f..b102a66a14c33dbb3d44aa36ad0b30a3119b2136 100644 (file)
@@ -31,7 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 extern "C" {
 #include "lualib.h"
 }
-#include "settings.h"
 #define MAINMENU_NUM_ASYNC_THREADS 4
 
 
index cf2a16aa60f47acb160820228d9e882db17592e8..3415ff818aa4f79de266db5dcbfe3794840e73b3 100644 (file)
@@ -33,7 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <cctype>
 #include <algorithm>
 
-Settings *g_settings = nullptr;
+Settings *g_settings = nullptr; // Populated in main()
 std::string g_settings_path;
 
 Settings *Settings::s_layers[SL_TOTAL_COUNT] = {0}; // Zeroed by compiler
@@ -85,6 +85,7 @@ Settings & Settings::operator = (const Settings &other)
        if (&other == this)
                return *this;
 
+       // TODO: Avoid copying Settings objects. Make this private.
        FATAL_ERROR_IF(m_settingslayer != SL_TOTAL_COUNT && other.m_settingslayer != SL_TOTAL_COUNT,
                ("Tried to copy unique Setting layer " + std::to_string(m_settingslayer)).c_str());
 
@@ -208,6 +209,7 @@ void Settings::writeLines(std::ostream &os, u32 tab_depth) const
        for (const auto &setting_it : m_settings)
                printEntry(os, setting_it.first, setting_it.second, tab_depth);
 
+       // For groups this must be "}" !
        if (!m_end_tag.empty()) {
                for (u32 i = 0; i < tab_depth; i++)
                        os << "\t";
@@ -458,20 +460,6 @@ const std::string &Settings::get(const std::string &name) const
 }
 
 
-const std::string &Settings::getDefault(const std::string &name) const
-{
-       const SettingsEntry *entry;
-       if (auto parent = getParent())
-               entry = &parent->getEntry(name);
-       else
-               entry = &getEntry(name); // Bottom of the chain
-
-       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));
index af4cae3cdf68c56ce7fa138f45e3b8dae4dab3d3..b5e859ee0521111151812b4f62066c54138798f5 100644 (file)
@@ -132,7 +132,6 @@ class Settings {
 
        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;
index d2d35c35709a7737334eb69366147f0f0a0c13c5..6b493c9e40ac3531259e9e7ebad1731346120691 100644 (file)
@@ -229,7 +229,7 @@ void TestSettings::testAllSettings()
                // Confirm settings
                Settings s2("[dummy_eof_end_tag]");
                std::istringstream is(config_text_after, std::ios_base::binary);
-               s2.parseConfigLines(is);
+               UASSERT(s2.parseConfigLines(is) == true);
 
                compare_settings("(main)", &s, &s2);
        }