diff --git a/src/platform/platform.h b/src/platform/platform.h index 98bd6b0041..4457d3a32a 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -80,6 +80,7 @@ void platform_process_messages(); int platform_scancode_to_rct_keycode(int sdl_key); void platform_start_text_input(char* buffer, int max_length); void platform_stop_text_input(); +void platform_update_config_window_size(); // Platform specific definitions char platform_get_path_separator(); diff --git a/src/platform/shared.c b/src/platform/shared.c index 4361a35451..47129bac09 100644 --- a/src/platform/shared.c +++ b/src/platform/shared.c @@ -453,6 +453,23 @@ static void platform_close_window() platform_unload_cursors(); } +void platform_update_config_window_size() +{ + // Check if the window has been resized in windowed mode and update the config file accordingly + // This is called in rct2_update_2 and is only called after resizing a window has finished + int width, height; + uint32 flags = SDL_GetWindowFlags(gWindow); + if ((flags & (SDL_WINDOW_MAXIMIZED | SDL_WINDOW_MINIMIZED | + SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)) == 0) { + SDL_GetWindowSize(gWindow, &width, &height); + if (width != gConfigGeneral.window_width || height != gConfigGeneral.window_height) { + gConfigGeneral.window_width = width; + gConfigGeneral.window_height = height; + config_save_default(); + } + } +} + void platform_init() { platform_create_window(); diff --git a/src/rct2.c b/src/rct2.c index f70848a2a7..c91f007473 100644 --- a/src/rct2.c +++ b/src/rct2.c @@ -345,6 +345,9 @@ void rct2_update_2() title_update(); else game_update(); + + // Update the windowed mode size in the config file if needed + platform_update_config_window_size(); } void rct2_endupdate()