Skip to content

Commit

Permalink
Store whether window is maximized (#12861)
Browse files Browse the repository at this point in the history
  • Loading branch information
Desour committed Apr 14, 2023
1 parent 0b08e1b commit d49d80a
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 36 deletions.
10 changes: 8 additions & 2 deletions builtin/settingtypes.txt
Expand Up @@ -136,13 +136,19 @@ virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool fals

[**Screen]

# Width component of the initial window size. Ignored in fullscreen mode.
# Width component of the initial window size.
screen_w (Screen width) int 1024 1 65535

# Height component of the initial window size. Ignored in fullscreen mode.
# Height component of the initial window size.
screen_h (Screen height) int 600 1 65535

# Whether the window is maximized.
window_maximized (Window maximized) bool false

# Save window size automatically when modified.
# If true, screen size is saved in screen_w and screen_h, and whether the window
# is maximized is stored in window_maximized.
# (Autosaving window_maximized only works if compiled with SDL.)
autosave_screensize (Autosave screen size) bool true

# Fullscreen mode.
Expand Down
27 changes: 9 additions & 18 deletions src/client/game.cpp
Expand Up @@ -1193,8 +1193,11 @@ void Game::run()
&& client->checkPrivilege("fast");
#endif

core::dimension2du previous_screen_size(g_settings->getU16("screen_w"),
g_settings->getU16("screen_h"));
const irr::core::dimension2du initial_screen_size(
g_settings->getU16("screen_w"),
g_settings->getU16("screen_h")
);
const bool initial_window_maximized = g_settings->getBool("window_maximized");

while (m_rendering_engine->run()
&& !(*kill || g_gamecallback->shutdown_requested
Expand All @@ -1211,27 +1214,13 @@ void Game::run()
dynamic_info_send_timer = 0.2f;
}

if (dynamic_info_send_timer > 0) {
if (dynamic_info_send_timer > 0.0f) {
dynamic_info_send_timer -= dtime;
if (dynamic_info_send_timer <= 0) {
if (dynamic_info_send_timer <= 0.0f) {
client->sendUpdateClientInfo(current_dynamic_info);
}
}

const core::dimension2du &current_screen_size =
RenderingEngine::get_video_driver()->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 != core::dimension2du(0, 0) &&
g_settings->getBool("autosave_screensize")) {
g_settings->setU16("screen_w", current_screen_size.Width);
g_settings->setU16("screen_h", current_screen_size.Height);
previous_screen_size = current_screen_size;
}

// Prepare render data for next iteration

updateStats(&stats, draw_times, dtime);
Expand Down Expand Up @@ -1285,6 +1274,8 @@ void Game::run()
showPauseMenu();
}
}

RenderingEngine::autosaveScreensizeAndCo(initial_screen_size, initial_window_maximized);
}


Expand Down
34 changes: 34 additions & 0 deletions src/client/renderingengine.cpp
Expand Up @@ -87,9 +87,11 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
bool fullscreen = g_settings->getBool("fullscreen");
#ifdef __ANDROID__
u16 screen_w = 0, screen_h = 0;
bool window_maximized = false;
#else
u16 screen_w = std::max<u16>(g_settings->getU16("screen_w"), 1);
u16 screen_h = std::max<u16>(g_settings->getU16("screen_h"), 1);
bool window_maximized = g_settings->getBool("window_maximized");
#endif

// bpp, fsaa, vsync
Expand Down Expand Up @@ -127,6 +129,8 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
params.WindowSize = core::dimension2d<u32>(screen_w, screen_h);
params.AntiAlias = fsaa;
params.Fullscreen = fullscreen;
params.WindowMaximized = window_maximized;
params.WindowResizable = 1; // 1 means always (required for window_maximized)
params.Stencilbuffer = false;
params.Vsync = vsync;
params.EventReceiver = receiver;
Expand Down Expand Up @@ -625,3 +629,33 @@ float RenderingEngine::getDisplayDensity()
}

#endif // __ANDROID__


void RenderingEngine::autosaveScreensizeAndCo(
const irr::core::dimension2d<u32> initial_screen_size,
const bool initial_window_maximized)
{
if (!g_settings->getBool("autosave_screensize"))
return;

// Note: If the screensize or similar hasn't changed (i.e. it's the same as
// the setting was when minetest started, as given by the initial_* parameters),
// we do not want to save the thing. This allows users to also manually change
// the settings.

// Screen size
const irr::core::dimension2d<u32> current_screen_size =
RenderingEngine::get_video_driver()->getScreenSize();
// Don't replace good value with (0, 0)
if (current_screen_size != irr::core::dimension2d<u32>(0, 0) &&
current_screen_size != initial_screen_size) {
g_settings->setU16("screen_w", current_screen_size.Width);
g_settings->setU16("screen_h", current_screen_size.Height);
}

// Window maximized
const bool is_window_maximized = RenderingEngine::get_raw_device()
->isWindowMaximized();
if (is_window_maximized != initial_window_maximized)
g_settings->setBool("window_maximized", is_window_maximized);
}
4 changes: 4 additions & 0 deletions src/client/renderingengine.h
Expand Up @@ -136,6 +136,10 @@ class RenderingEngine
}
static std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();

static void autosaveScreensizeAndCo(
const irr::core::dimension2d<u32> initial_screen_size,
const bool initial_window_maximized);

private:
v2u32 _getWindowSize() const;

Expand Down
1 change: 1 addition & 0 deletions src/defaultsettings.cpp
Expand Up @@ -188,6 +188,7 @@ void set_default_settings()
settings->setDefault("client_mesh_chunk", "1");
settings->setDefault("screen_w", "1024");
settings->setDefault("screen_h", "600");
settings->setDefault("window_maximized", "false");
settings->setDefault("autosave_screensize", "true");
settings->setDefault("fullscreen", "false");
settings->setDefault("vsync", "false");
Expand Down
24 changes: 8 additions & 16 deletions src/gui/guiEngine.cpp
Expand Up @@ -249,9 +249,6 @@ void GUIEngine::run()

unsigned int text_height = g_fontengine->getTextHeight();

irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"),
g_settings->getU16("screen_h"));

// Reset fog color
{
video::SColor fog_color;
Expand All @@ -268,20 +265,13 @@ void GUIEngine::run()
fog_end, fog_density, fog_pixelfog, fog_rangefog);
}

while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {
const irr::core::dimension2d<u32> initial_screen_size(
g_settings->getU16("screen_w"),
g_settings->getU16("screen_h")
);
const bool initial_window_maximized = g_settings->getBool("window_maximized");

const irr::core::dimension2d<u32> &current_screen_size =
m_rendering_engine->get_video_driver()->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("screen_w", current_screen_size.Width);
g_settings->setU16("screen_h", current_screen_size.Height);
previous_screen_size = current_screen_size;
}
while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {

//check if we need to update the "upper left corner"-text
if (text_height != g_fontengine->getTextHeight()) {
Expand Down Expand Up @@ -321,6 +311,8 @@ void GUIEngine::run()
m_menu->getAndroidUIInput();
#endif
}

RenderingEngine::autosaveScreensizeAndCo(initial_screen_size, initial_window_maximized);
}

/******************************************************************************/
Expand Down

0 comments on commit d49d80a

Please sign in to comment.