From 167f1a5ddd1525c1ac4088b00fdc6cff4e6a7661 Mon Sep 17 00:00:00 2001 From: shweet Date: Thu, 12 Nov 2026 21:53:01 -0500 Subject: [PATCH] Save window position --- MODDING.md | 1 + src/main.cpp | 4 ++++ src/save.cpp | 2 ++ src/save.h | 3 +++ 4 files changed, 10 insertions(+) diff --git a/MODDING.md b/MODDING.md index 13fbb41..7071031 100644 --- a/MODDING.md +++ b/MODDING.md @@ -324,6 +324,7 @@ Stores general game settings and configuration; beyond individual characters. | `color` | Red, green and blue (0-1) of the menu color. | | `character_color` | `1` to use the character's color while playing. | | `width`, `height` | Window size. | +| `x`, `y` | Window position. | | `last_character` | The character being played at exit, which the game continues on start. | | `console` | `1` enables the developer console (the grave key). | diff --git a/src/main.cpp b/src/main.cpp index 86eca63..8ba1732 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -110,6 +110,7 @@ static void init() SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); game.window = SDL_CreateWindow(GAME_NAME, game.settings.width, game.settings.height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); + SDL_SetWindowPosition(game.window, game.settings.x, game.settings.y); game.context = game.window ? SDL_GL_CreateContext(game.window) : nullptr; if (game.context) game.renderer.init(); @@ -201,7 +202,10 @@ static void update() SDL_SetWindowFullscreen(game.window, !(SDL_GetWindowFlags(game.window) & SDL_WINDOW_FULLSCREEN)); ui.isFullscreen = SDL_GetWindowFlags(game.window) & SDL_WINDOW_FULLSCREEN; if (!ui.isFullscreen) + { SDL_GetWindowSize(game.window, &game.settings.width, &game.settings.height); + SDL_GetWindowPosition(game.window, &game.settings.x, &game.settings.y); + } bool isCursorHidden = game.screen == SCREEN_PLAY && play.character->cursor && !console.isOpen; isCursorHidden ? SDL_HideCursor() : SDL_ShowCursor(); } diff --git a/src/save.cpp b/src/save.cpp index 66021ee..cc82e08 100644 --- a/src/save.cpp +++ b/src/save.cpp @@ -135,6 +135,8 @@ template void Settings::visit(Visitor&& visitor) visitor("mute", isMuted); visitor("volume", volume); visitor("width", width); + visitor("x", x); + visitor("y", y); } void Settings::load() diff --git a/src/save.h b/src/save.h index c9f8c8f..b85711c 100644 --- a/src/save.h +++ b/src/save.h @@ -1,6 +1,7 @@ #pragma once #include "common.h" +#include #include #include @@ -18,6 +19,8 @@ struct Settings int height = 900; int volume = 50; int width = 1600; + int x = SDL_WINDOWPOS_CENTERED; + int y = SDL_WINDOWPOS_CENTERED; Measurement measurement = MEASUREMENT_METRIC; bool isCharacterColor = true; bool isConsole = false;