From 4bff6f32cadd1a3631692f782200fccfabc3a7c4 Mon Sep 17 00:00:00 2001 From: eldskald Date: Fri, 19 Apr 2024 01:31:48 -0300 Subject: [PATCH] Fix window not initializing on primary monitor on GLFW backend The way the current code worked was by calling `GetCurrentMonitor()`, which would always return the monitor at position (0,0). This isn't the primary monitor on all platforms, on Linux in particular it isn't the case. This isn't the case on the SDL backend, after calling `InitWindow()` the window would always show up on the primary monitor. Even on the GLFW backend, if the full screen flag was set it would attempt to put it on the primary monitor as it would call `glfwGetPrimaryMonitor()` to do it, so for consistency's sake we should do it on windowed mode too. --- src/platforms/rcore_desktop.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/platforms/rcore_desktop.c b/src/platforms/rcore_desktop.c index 64e79c6dc..211a6cbb3 100644 --- a/src/platforms/rcore_desktop.c +++ b/src/platforms/rcore_desktop.c @@ -1518,10 +1518,16 @@ int InitPlatform(void) else { // Try to center window on screen but avoiding window-bar outside of screen - int posX = GetMonitorWidth(GetCurrentMonitor())/2 - CORE.Window.screen.width/2; - int posY = GetMonitorHeight(GetCurrentMonitor())/2 - CORE.Window.screen.height/2; - if (posX < 0) posX = 0; - if (posY < 0) posY = 0; + int monitorX = 0; + int monitorY = 0; + int monitorWidth = 0; + int monitorHeight = 0; + glfwGetMonitorWorkarea(monitor, &monitorX, &monitorY, &monitorWidth, &monitorHeight); + + int posX = monitorX + (monitorWidth - CORE.Window.screen.width)/2; + int posY = monitorY + (monitorHeight - CORE.Window.screen.height)/2; + if (posX < monitorX) posX = monitorX; + if (posY < monitorY) posY = monitorY; SetWindowPosition(posX, posY); }