Skip to content

Commit 21e0a04

Browse files
authoredMay 5, 2017
Save minetest screen width/height options when modified (#5683)
* Save minetest screen width/height options when modified * Add autosave_screensize setting (default true) * Fix @SmallJoker comments
1 parent d6cf545 commit 21e0a04

File tree

6 files changed

+50
-3
lines changed

6 files changed

+50
-3
lines changed
 

‎builtin/mainmenu/tab_settings.lua

+8-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ local function formspec(tabview, name, tabdata)
190190
.. getSettingIndex.NodeHighlighting() .. "]" ..
191191
"dropdown[0.25,3.6;3.3;dd_leaves_style;" .. dd_options.leaves[1] .. ";"
192192
.. getSettingIndex.Leaves() .. "]" ..
193-
"box[3.75,0;3.75,3.45;#999999]" ..
193+
"box[3.75,0;3.75,4.45;#999999]" ..
194194
"label[3.85,0.1;" .. fgettext("Texturing:") .. "]" ..
195195
"dropdown[3.85,0.55;3.85;dd_filters;" .. dd_options.filters[1] .. ";"
196196
.. getSettingIndex.Filter() .. "]" ..
@@ -199,6 +199,9 @@ local function formspec(tabview, name, tabdata)
199199
"label[3.85,2.15;" .. fgettext("Antialiasing:") .. "]" ..
200200
"dropdown[3.85,2.6;3.85;dd_antialiasing;" .. dd_options.antialiasing[1] .. ";"
201201
.. getSettingIndex.Antialiasing() .. "]" ..
202+
"label[3.85,3.45;" .. fgettext("Screen:") .. "]" ..
203+
"checkbox[3.85,3.6;cb_autosave_screensize;" .. fgettext("Autosave screen size") .. ";"
204+
.. dump(core.setting_getbool("autosave_screensize")) .. "]" ..
202205
"box[7.75,0;4,4.4;#999999]" ..
203206
"checkbox[8,0;cb_shaders;" .. fgettext("Shaders") .. ";"
204207
.. dump(core.setting_getbool("enable_shaders")) .. "]"
@@ -290,6 +293,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
290293
core.setting_set("connected_glass", fields["cb_connected_glass"])
291294
return true
292295
end
296+
if fields["cb_autosave_screensize"] then
297+
core.setting_set("autosave_screensize", fields["cb_autosave_screensize"])
298+
return true
299+
end
293300
if fields["cb_shaders"] then
294301
if (core.setting_get("video_driver") == "direct3d8" or
295302
core.setting_get("video_driver") == "direct3d9") then

‎builtin/settingtypes.txt

+3
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,9 @@ screenW (Screen width) int 800
459459
# Height component of the initial window size.
460460
screenH (Screen height) int 600
461461

462+
# Save window size automatically when modified.
463+
autosave_screensize (Autosave Screen Size) bool true
464+
462465
# Fullscreen mode.
463466
fullscreen (Full screen) bool false
464467

‎minetest.conf.example

+4
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,10 @@
526526
# type: int
527527
# screenH = 600
528528

529+
# Save the window size automatically when modified.
530+
# type: bool
531+
# autosave_screensize = true
532+
529533
# Fullscreen mode.
530534
# type: bool
531535
# fullscreen = false

‎src/defaultsettings.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ void set_default_settings(Settings *settings)
121121
settings->setDefault("viewing_range", "100");
122122
settings->setDefault("screenW", "800");
123123
settings->setDefault("screenH", "600");
124+
settings->setDefault("autosave_screensize", "true");
124125
settings->setDefault("fullscreen", "false");
125126
settings->setDefault("fullscreen_bpp", "24");
126127
settings->setDefault("vsync", "false");

‎src/game.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -1629,10 +1629,26 @@ void Game::run()
16291629
&& client->checkPrivilege("fast");
16301630
#endif
16311631

1632+
irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screenW"),
1633+
g_settings->getU16("screenH"));
1634+
16321635
while (device->run()
16331636
&& !(*kill || g_gamecallback->shutdown_requested
16341637
|| (server && server->getShutdownRequested()))) {
16351638

1639+
const irr::core::dimension2d<u32> &current_screen_size =
1640+
device->getVideoDriver()->getScreenSize();
1641+
// Verify if window size has changed and save it if it's the case
1642+
// Ensure evaluating settings->getBool after verifying screensize
1643+
// First condition is cheaper
1644+
if (previous_screen_size != current_screen_size &&
1645+
current_screen_size != irr::core::dimension2d<u32>(0,0) &&
1646+
g_settings->getBool("autosave_screensize")) {
1647+
g_settings->setU16("screenW", current_screen_size.Width);
1648+
g_settings->setU16("screenH", current_screen_size.Height);
1649+
previous_screen_size = current_screen_size;
1650+
}
1651+
16361652
/* Must be called immediately after a device->run() call because it
16371653
* uses device->getTimer()->getTime()
16381654
*/

‎src/guiEngine.cpp

+18-2
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,24 @@ void GUIEngine::run()
262262

263263
unsigned int text_height = g_fontengine->getTextHeight();
264264

265-
while(m_device->run() && (!m_startgame) && (!m_kill))
266-
{
265+
irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screenW"),
266+
g_settings->getU16("screenH"));
267+
268+
while (m_device->run() && (!m_startgame) && (!m_kill)) {
269+
270+
const irr::core::dimension2d<u32> &current_screen_size =
271+
m_device->getVideoDriver()->getScreenSize();
272+
// Verify if window size has changed and save it if it's the case
273+
// Ensure evaluating settings->getBool after verifying screensize
274+
// First condition is cheaper
275+
if (previous_screen_size != current_screen_size &&
276+
current_screen_size != irr::core::dimension2d<u32>(0,0) &&
277+
g_settings->getBool("autosave_screensize")) {
278+
g_settings->setU16("screenW", current_screen_size.Width);
279+
g_settings->setU16("screenH", current_screen_size.Height);
280+
previous_screen_size = current_screen_size;
281+
}
282+
267283
//check if we need to update the "upper left corner"-text
268284
if (text_height != g_fontengine->getTextHeight()) {
269285
updateTopLeftTextSize();

0 commit comments

Comments
 (0)
Please sign in to comment.