]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Save minetest screen width/height options when modified (#5683)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Fri, 5 May 2017 11:47:11 +0000 (13:47 +0200)
committerGitHub <noreply@github.com>
Fri, 5 May 2017 11:47:11 +0000 (13:47 +0200)
* Save minetest screen width/height options when modified

* Add autosave_screensize setting (default true)

* Fix @SmallJoker comments

builtin/mainmenu/tab_settings.lua
builtin/settingtypes.txt
minetest.conf.example
src/defaultsettings.cpp
src/game.cpp
src/guiEngine.cpp

index e59572a41ac5f3f069f94137598ec0483e89c270..8a97d8334923a0ae3e026593ddd4c8da11a273ba 100644 (file)
@@ -190,7 +190,7 @@ local function formspec(tabview, name, tabdata)
                                .. getSettingIndex.NodeHighlighting() .. "]" ..
                "dropdown[0.25,3.6;3.3;dd_leaves_style;" .. dd_options.leaves[1] .. ";"
                                .. getSettingIndex.Leaves() .. "]" ..
-               "box[3.75,0;3.75,3.45;#999999]" ..
+               "box[3.75,0;3.75,4.45;#999999]" ..
                "label[3.85,0.1;" .. fgettext("Texturing:") .. "]" ..
                "dropdown[3.85,0.55;3.85;dd_filters;" .. dd_options.filters[1] .. ";"
                                .. getSettingIndex.Filter() .. "]" ..
@@ -199,6 +199,9 @@ local function formspec(tabview, name, tabdata)
                "label[3.85,2.15;" .. fgettext("Antialiasing:") .. "]" ..
                "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. dd_options.antialiasing[1] .. ";"
                                .. getSettingIndex.Antialiasing() .. "]" ..
+               "label[3.85,3.45;" .. fgettext("Screen:") .. "]" ..
+               "checkbox[3.85,3.6;cb_autosave_screensize;" .. fgettext("Autosave screen size") .. ";"
+                               .. dump(core.setting_getbool("autosave_screensize")) .. "]" ..
                "box[7.75,0;4,4.4;#999999]" ..
                "checkbox[8,0;cb_shaders;" .. fgettext("Shaders") .. ";"
                                .. dump(core.setting_getbool("enable_shaders")) .. "]"
@@ -290,6 +293,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
                core.setting_set("connected_glass", fields["cb_connected_glass"])
                return true
        end
+       if fields["cb_autosave_screensize"] then
+               core.setting_set("autosave_screensize", fields["cb_autosave_screensize"])
+               return true
+       end
        if fields["cb_shaders"] then
                if (core.setting_get("video_driver") == "direct3d8" or
                                core.setting_get("video_driver") == "direct3d9") then
index 29a96ab8e73ed0ecfaf8dad9243b944e464e93e3..4b82a1e0ecea0ba96e13d169abd9b1cbc3036d61 100644 (file)
@@ -459,6 +459,9 @@ screenW (Screen width) int 800
 #    Height component of the initial window size.
 screenH (Screen height) int 600
 
+#    Save window size automatically when modified.
+autosave_screensize (Autosave Screen Size) bool true
+
 #    Fullscreen mode.
 fullscreen (Full screen) bool false
 
index ecbadb556adc85a61a02b7fb3fc2065364385dcc..b9efc432a335c2ceaf00ae7b2bab281395bb82ce 100644 (file)
 #    type: int
 # screenH = 600
 
+#    Save the window size automatically when modified.
+#    type: bool
+# autosave_screensize = true
+
 #    Fullscreen mode.
 #    type: bool
 # fullscreen = false
index d45e386cf817d8a30d7b0635d73cd16cc5b0418b..434c887e8729e5395b8809d623f7c36b8dae8acf 100644 (file)
@@ -121,6 +121,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("viewing_range", "100");
        settings->setDefault("screenW", "800");
        settings->setDefault("screenH", "600");
+       settings->setDefault("autosave_screensize", "true");
        settings->setDefault("fullscreen", "false");
        settings->setDefault("fullscreen_bpp", "24");
        settings->setDefault("vsync", "false");
index be0cc8fd5bfa8b34dcceda8859c40822301ed5f5..ace6474566d801c846e092ab4c4abdab475e3ee9 100644 (file)
@@ -1629,10 +1629,26 @@ void Game::run()
                        && client->checkPrivilege("fast");
 #endif
 
+       irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screenW"),
+               g_settings->getU16("screenH"));
+
        while (device->run()
                        && !(*kill || g_gamecallback->shutdown_requested
                        || (server && server->getShutdownRequested()))) {
 
+               const irr::core::dimension2d<u32> &current_screen_size =
+                       device->getVideoDriver()->getScreenSize();
+               // Verify if window size has changed and save it if it's the case
+               // Ensure evaluating settings->getBool after verifying screensize
+               // First condition is cheaper
+               if (previous_screen_size != current_screen_size &&
+                               current_screen_size != irr::core::dimension2d<u32>(0,0) &&
+                               g_settings->getBool("autosave_screensize")) {
+                       g_settings->setU16("screenW", current_screen_size.Width);
+                       g_settings->setU16("screenH", current_screen_size.Height);
+                       previous_screen_size = current_screen_size;
+               }
+
                /* Must be called immediately after a device->run() call because it
                 * uses device->getTimer()->getTime()
                 */
index ebc4aac4416e3e9ea9811e4cf45aa66970c33c95..2d1bd6d44acbdd4bca6cb9671dd518d099f7d441 100644 (file)
@@ -262,8 +262,24 @@ void GUIEngine::run()
 
        unsigned int text_height = g_fontengine->getTextHeight();
 
-       while(m_device->run() && (!m_startgame) && (!m_kill))
-       {
+       irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screenW"),
+               g_settings->getU16("screenH"));
+
+       while (m_device->run() && (!m_startgame) && (!m_kill)) {
+
+               const irr::core::dimension2d<u32> &current_screen_size =
+                       m_device->getVideoDriver()->getScreenSize();
+               // Verify if window size has changed and save it if it's the case
+               // Ensure evaluating settings->getBool after verifying screensize
+               // First condition is cheaper
+               if (previous_screen_size != current_screen_size &&
+                               current_screen_size != irr::core::dimension2d<u32>(0,0) &&
+                               g_settings->getBool("autosave_screensize")) {
+                       g_settings->setU16("screenW", current_screen_size.Width);
+                       g_settings->setU16("screenH", current_screen_size.Height);
+                       previous_screen_size = current_screen_size;
+               }
+
                //check if we need to update the "upper left corner"-text
                if (text_height != g_fontengine->getTextHeight()) {
                        updateTopLeftTextSize();