window: fix abnormal window states erroneously saving dimensions

This commit is contained in:
Hyper 2024-11-05 14:37:07 +00:00
parent 9e2edfe8cd
commit fabc1ffbc7
3 changed files with 29 additions and 32 deletions

View file

@ -38,7 +38,7 @@ int Window_OnSDLEvent(void*, SDL_Event* event)
// Restore original window dimensions on F2. // Restore original window dimensions on F2.
case SDLK_F2: case SDLK_F2:
Config::Fullscreen = Window::SetFullscreen(false); Config::Fullscreen = Window::SetFullscreen(false);
Window::SetDimensions(SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, DEFAULT_WIDTH, DEFAULT_HEIGHT); Window::SetDimensions(DEFAULT_WIDTH, DEFAULT_HEIGHT);
break; break;
// Recentre window on F3. // Recentre window on F3.
@ -47,7 +47,7 @@ int Window_OnSDLEvent(void*, SDL_Event* event)
if (Window::IsFullscreen()) if (Window::IsFullscreen())
break; break;
Window::SetDimensions(SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, Window::s_width, Window::s_height); Window::SetDimensions(Window::s_width, Window::s_height);
break; break;
} }
@ -82,43 +82,23 @@ int Window_OnSDLEvent(void*, SDL_Event* event)
break; break;
case SDL_WINDOWEVENT_RESTORED: case SDL_WINDOWEVENT_RESTORED:
case SDL_WINDOWEVENT_MAXIMIZED: Config::WindowState = EWindowState::Normal;
{ break;
Config::WindowState = Window::IsMaximised()
? EWindowState::Maximised case SDL_WINDOWEVENT_MAXIMIZED:
: EWindowState::Normal; Config::WindowState = EWindowState::Maximised;
break; break;
}
case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_RESIZED:
{
Window::s_width = event->window.data1; Window::s_width = event->window.data1;
Window::s_height = event->window.data2; Window::s_height = event->window.data2;
if (!Window::IsFullscreen())
{
Config::WindowWidth = Window::s_width;
Config::WindowHeight = Window::s_height;
}
break; break;
}
case SDL_WINDOWEVENT_MOVED: case SDL_WINDOWEVENT_MOVED:
{
Window::s_x = event->window.data1; Window::s_x = event->window.data1;
Window::s_y = event->window.data2; Window::s_y = event->window.data2;
if (!Window::IsFullscreen())
{
Config::WindowX = Window::s_x;
Config::WindowY = Window::s_y;
}
break; break;
} }
}
break; break;
} }
@ -157,7 +137,7 @@ void Window::Init()
s_pWindow = SDL_CreateWindow("SWA", s_x, s_y, s_width, s_height, GetWindowFlags()); s_pWindow = SDL_CreateWindow("SWA", s_x, s_y, s_width, s_height, GetWindowFlags());
if (Config::Fullscreen) if (IsFullscreen())
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);
SetIcon(); SetIcon();
@ -171,6 +151,17 @@ void Window::Init()
s_handle = info.info.win.window; s_handle = info.info.win.window;
} }
void Window::Update()
{
if (!Window::IsFullscreen() && !Window::IsMaximised())
{
Config::WindowWidth = Window::s_width;
Config::WindowHeight = Window::s_height;
Config::WindowX = Window::s_x;
Config::WindowY = Window::s_y;
}
}
// CApplication::Update // CApplication::Update
PPC_FUNC_IMPL(__imp__sub_822C1130); PPC_FUNC_IMPL(__imp__sub_822C1130);
PPC_FUNC(sub_822C1130) PPC_FUNC(sub_822C1130)
@ -178,5 +169,7 @@ PPC_FUNC(sub_822C1130)
SDL_PumpEvents(); SDL_PumpEvents();
SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT);
Window::Update();
__imp__sub_822C1130(ctx, base); __imp__sub_822C1130(ctx, base);
} }

View file

@ -106,12 +106,12 @@ public:
return rect; return rect;
} }
static void SetDimensions(int x, int y, int w, int h) static void SetDimensions(int w, int h, int x = SDL_WINDOWPOS_CENTERED, int y = SDL_WINDOWPOS_CENTERED)
{ {
s_x = x;
s_y = y;
s_width = w; s_width = w;
s_height = h; s_height = h;
s_x = x;
s_y = y;
SDL_SetWindowSize(s_pWindow, w, h); SDL_SetWindowSize(s_pWindow, w, h);
SDL_ResizeEvent(s_pWindow, w, h); SDL_ResizeEvent(s_pWindow, w, h);
@ -151,6 +151,9 @@ public:
auto x = s_x; auto x = s_x;
auto y = s_y; auto y = s_y;
if (!Config::Fullscreen && s_width == bounds.w && s_height == bounds.h)
return false;
if (x == SDL_WINDOWPOS_CENTERED) if (x == SDL_WINDOWPOS_CENTERED)
x = bounds.w / 2 - s_width / 2; x = bounds.w / 2 - s_width / 2;
@ -169,4 +172,5 @@ public:
} }
static void Init(); static void Init();
static void Update();
}; };