summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorubkp <[email protected]>2023-07-28 15:08:41 -0300
committerGitHub <[email protected]>2023-07-28 20:08:41 +0200
commit962030e70ad3dfcce5d4642ad65890fde93ad117 (patch)
tree2df6fc16ff1fd4662c62ada8bdefae80847b090e
parent5d28bad0adf2a85a48f6ce4644ce728ec9868208 (diff)
downloadraylib-962030e70ad3dfcce5d4642ad65890fde93ad117.tar.gz
raylib-962030e70ad3dfcce5d4642ad65890fde93ad117.zip
Changes SetWindowMonitor() to no longer force fullscreen (#3209)
* Changes SetWindowMonitor() to no longer force fullscreen * Readds fullscreen support
-rw-r--r--src/raylib.h2
-rw-r--r--src/rcore.c32
2 files changed, 29 insertions, 5 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 108ab024..b3f17bd5 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -954,7 +954,7 @@ RLAPI void SetWindowIcon(Image image); // Set icon fo
RLAPI void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP)
RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
-RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode)
+RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window
RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
RLAPI void SetWindowSize(int width, int height); // Set window dimensions
RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
diff --git a/src/rcore.c b/src/rcore.c
index d6aeaec9..66a914ee 100644
--- a/src/rcore.c
+++ b/src/rcore.c
@@ -1661,7 +1661,7 @@ void SetWindowPosition(int x, int y)
#endif
}
-// Set monitor for the current window (fullscreen mode)
+// Set monitor for the current window
void SetWindowMonitor(int monitor)
{
#if defined(PLATFORM_DESKTOP)
@@ -1670,10 +1670,34 @@ void SetWindowMonitor(int monitor)
if ((monitor >= 0) && (monitor < monitorCount))
{
- TRACELOG(LOG_INFO, "GLFW: Selected fullscreen monitor: [%i] %s", monitor, glfwGetMonitorName(monitors[monitor]));
+ if (CORE.Window.fullscreen)
+ {
+ TRACELOG(LOG_INFO, "GLFW: Selected fullscreen monitor: [%i] %s", monitor, glfwGetMonitorName(monitors[monitor]));
- const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
- glfwSetWindowMonitor(CORE.Window.handle, monitors[monitor], 0, 0, mode->width, mode->height, mode->refreshRate);
+ const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
+ glfwSetWindowMonitor(CORE.Window.handle, monitors[monitor], 0, 0, mode->width, mode->height, mode->refreshRate);
+ }
+ else
+ {
+ TRACELOG(LOG_INFO, "GLFW: Selected monitor: [%i] %s", monitor, glfwGetMonitorName(monitors[monitor]));
+
+ const int screenWidth = CORE.Window.screen.width;
+ const int screenHeight = CORE.Window.screen.height;
+ int monitorWorkareaX = 0;
+ int monitorWorkareaY = 0;
+ int monitorWorkareaWidth = 0;
+ int monitorWorkareaHeight = 0;
+ glfwGetMonitorWorkarea(monitors[monitor], &monitorWorkareaX, &monitorWorkareaY, &monitorWorkareaWidth, &monitorWorkareaHeight);
+
+ // If the screen size is larger than the monitor workarea, anchor it on the top left corner, otherwise, center it
+ if ((screenWidth >= monitorWorkareaWidth) || (screenHeight >= monitorWorkareaHeight)) glfwSetWindowPos(CORE.Window.handle, monitorWorkareaX, monitorWorkareaY);
+ else
+ {
+ const int x = monitorWorkareaX + (monitorWorkareaWidth*0.5f) - (screenWidth*0.5f);
+ const int y = monitorWorkareaY + (monitorWorkareaHeight*0.5f) - (screenHeight*0.5f);
+ glfwSetWindowPos(CORE.Window.handle, x, y);
+ }
+ }
}
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
#endif