From 284574d72df8a7250341fae4a37e6104e9ec2dbd Mon Sep 17 00:00:00 2001 From: Michael Ragazzon Date: Sat, 6 Jul 2024 22:01:29 +0200 Subject: [PATCH] Win32 backends: Center window on screen when opening it --- Backends/RmlUi_Backend_Win32_GL2.cpp | 8 ++++++-- Backends/RmlUi_Backend_Win32_VK.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Backends/RmlUi_Backend_Win32_GL2.cpp b/Backends/RmlUi_Backend_Win32_GL2.cpp index 9b14542de..6181dac7f 100644 --- a/Backends/RmlUi_Backend_Win32_GL2.cpp +++ b/Backends/RmlUi_Backend_Win32_GL2.cpp @@ -390,8 +390,12 @@ static HWND InitializeWindow(HINSTANCE instance_handle, const std::wstring& name SetWindowLong(window_handle, GWL_EXSTYLE, extended_style); SetWindowLong(window_handle, GWL_STYLE, style); - // Resize the window. - SetWindowPos(window_handle, HWND_TOP, 0, 0, window_rect.right - window_rect.left, window_rect.bottom - window_rect.top, SWP_NOACTIVATE); + // Resize the window and center it on the screen. + Rml::Vector2i screen_size = {GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)}; + Rml::Vector2i window_size = {int(window_rect.right - window_rect.left), int(window_rect.bottom - window_rect.top)}; + Rml::Vector2i window_pos = Rml::Math::Max((screen_size - window_size) / 2, Rml::Vector2i(0)); + + SetWindowPos(window_handle, HWND_TOP, window_pos.x, window_pos.y, window_size.x, window_size.y, SWP_NOACTIVATE); return window_handle; } diff --git a/Backends/RmlUi_Backend_Win32_VK.cpp b/Backends/RmlUi_Backend_Win32_VK.cpp index 90f66279d..0670ae636 100644 --- a/Backends/RmlUi_Backend_Win32_VK.cpp +++ b/Backends/RmlUi_Backend_Win32_VK.cpp @@ -398,8 +398,12 @@ static HWND InitializeWindow(HINSTANCE instance_handle, const std::wstring& name SetWindowLong(window_handle, GWL_EXSTYLE, extended_style); SetWindowLong(window_handle, GWL_STYLE, style); - // Resize the window. - SetWindowPos(window_handle, HWND_TOP, 0, 0, window_rect.right - window_rect.left, window_rect.bottom - window_rect.top, SWP_NOACTIVATE); + // Resize the window and center it on the screen. + Rml::Vector2i screen_size = {GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)}; + Rml::Vector2i window_size = {int(window_rect.right - window_rect.left), int(window_rect.bottom - window_rect.top)}; + Rml::Vector2i window_pos = Rml::Math::Max((screen_size - window_size) / 2, Rml::Vector2i(0)); + + SetWindowPos(window_handle, HWND_TOP, window_pos.x, window_pos.y, window_size.x, window_size.y, SWP_NOACTIVATE); return window_handle; }