diff --git a/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h b/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h index 20080f495..666b17a6a 100644 --- a/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +++ b/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h @@ -16,6 +16,9 @@ RLAPI bool IsWindowResized(void); // Check if wi RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags +RLAPI void SetWindowScale(float scaleFactor); // Set window scale factor +RLAPI void SaveWindowScale(void); // Save window scale to defaults +RLAPI void RestoreWindowScale(void); // Load window scale from defaults RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP) diff --git a/src/core.c b/src/core.c index 21cd8313b..10208ace6 100644 --- a/src/core.c +++ b/src/core.c @@ -1035,11 +1035,7 @@ void ToggleFullscreen(void) CORE.Window.flags ^= FLAG_FULLSCREEN_MODE; if (CORE.Window.fullscreen) { - CORE.Window.defaultScreenScaleX = CORE.Window.screenScaleX; - CORE.Window.defaultScreenScaleY = CORE.Window.screenScaleY; - CORE.Window.defaultScreen = CORE.Window.screen; - CORE.Window.defaultRender = CORE.Window.render; - CORE.Window.defaultScreenScale = CORE.Window.screenScale; + SaveWindowScale(); // Store previous window position (in case we exit fullscreen) glfwGetWindowPos(CORE.Window.handle, &CORE.Window.position.x, &CORE.Window.position.y); @@ -1070,9 +1066,7 @@ void ToggleFullscreen(void) } const GLFWvidmode *mode = glfwGetVideoMode(monitor); - CORE.Window.screenScaleX = 1.0f; - CORE.Window.screenScaleY = 1.0f; - CORE.Window.screenScale = MatrixIdentity(); + SetWindowScale(1.0f); glfwSetWindowMonitor(CORE.Window.handle, monitor, 0, 0, CORE.Window.screen.width, CORE.Window.screen.height, mode->refreshRate); // Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS) @@ -1080,11 +1074,7 @@ void ToggleFullscreen(void) if (CORE.Window.flags & FLAG_VSYNC_HINT) glfwSwapInterval(1); } else { - CORE.Window.screenScaleX = CORE.Window.defaultScreenScaleX; - CORE.Window.screenScaleY = CORE.Window.defaultScreenScaleY; - CORE.Window.screen = CORE.Window.defaultScreen; - CORE.Window.render = CORE.Window.defaultRender; - CORE.Window.screenScale = CORE.Window.defaultScreenScale; + RestoreWindowScale(); glfwSetWindowMonitor(CORE.Window.handle, NULL, CORE.Window.position.x, CORE.Window.position.y, (int)((float)CORE.Window.screen.width * CORE.Window.screenScaleX), (int)((float)CORE.Window.screen.height * CORE.Window.screenScaleY), GLFW_DONT_CARE); } @@ -1130,6 +1120,39 @@ void ToggleFullscreen(void) #endif } +// Set window scale factor +void SetWindowScale(float scaleFactor) +{ +#if defined(PLATFORM_DESKTOP) + CORE.Window.screenScaleX = scaleFactor; + CORE.Window.screenScaleY = scaleFactor; + CORE.Window.screenScale = (scaleFactor == 1.0f) ? MatrixIdentity(): MatrixScale(scaleFactor, scaleFactor, 1.0f); +#endif +} + +// Save window scale to defaults +void SaveWindowScale() +{ +#if defined(PLATFORM_DESKTOP) + CORE.Window.defaultScreenScaleX = CORE.Window.screenScaleX; + CORE.Window.defaultScreenScaleY = CORE.Window.screenScaleY; + CORE.Window.defaultScreen = CORE.Window.screen; + CORE.Window.defaultRender = CORE.Window.render; + CORE.Window.defaultScreenScale = CORE.Window.screenScale; +#endif +} + +// Load window scale from defaults +void RestoreWindowScale() { +#if defined(PLATFORM_DESKTOP) + CORE.Window.screenScaleX = CORE.Window.defaultScreenScaleX; + CORE.Window.screenScaleY = CORE.Window.defaultScreenScaleY; + CORE.Window.screen = CORE.Window.defaultScreen; + CORE.Window.render = CORE.Window.defaultRender; + CORE.Window.screenScale = CORE.Window.defaultScreenScale; +#endif +} + // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) void MaximizeWindow(void) { @@ -4095,16 +4118,12 @@ static void SetupWindowContentScale(int width, int height) glfwGetWindowContentScale(CORE.Window.handle, screenScaleX, screenScaleY); CORE.Window.screenScale = MatrixScale(CORE.Window.screenScaleX, CORE.Window.screenScaleY, 1.0f); } else { - CORE.Window.screenScaleX = 1.0f; - CORE.Window.screenScaleY = 1.0f; - CORE.Window.screenScale = MatrixIdentity(); + SetWindowScale(1.0f); } } else { - CORE.Window.screenScaleX = 1.0f; - CORE.Window.screenScaleY = 1.0f; - CORE.Window.screenScale = MatrixIdentity(); + SetWindowScale(1.0f); } if (width == 0) { width = (int)(((float)CORE.Window.defaultScreen.width)/CORE.Window.screenScaleX); diff --git a/src/raylib.h b/src/raylib.h index fd85814ba..bc988204b 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -902,6 +902,9 @@ RLAPI bool IsWindowResized(void); // Check if wi RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags +RLAPI void SetWindowScale(float scaleFactor); // Set window scale factor +RLAPI void SaveWindowScale(void); // Save window scale to defaults +RLAPI void RestoreWindowScale(void); // Load window scale from defaults RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP)