From f3d8fc75e9f5187bd01636290a5f09ef5d2ede99 Mon Sep 17 00:00:00 2001 From: SuperUserNameMan <9801802+SuperUserNameMan@users.noreply.github.com> Date: Tue, 23 Jul 2024 11:06:45 +0200 Subject: [PATCH] `rcore_desktop_glfw.c` : mouse offset and scaling consistency - part 2 I did not want to touch `rcore.c`, but it was required for cross-paltform consistency, so that `SetMouseScale()` and `SetMouseOffset()` have same effect on every platform, and don't interfere with mouse offset and scaling required and preset by a platform which should, instead, use the new `CORE.Input.Mouse.platformOffset` and `CORE.Input.Mouse.platformScale`. --- src/platforms/rcore_desktop_glfw.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index ddc8246bb..039782d93 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -130,7 +130,10 @@ static void _SetupFramebuffer(int frameBufferWidth, int frameBufferHeight, bool static bool _ActivateHardwareFullscreenMode(int monitorIndex, int desiredWidth, int desiredHeight, int desiredRefreshRate); static void _DeactivateHardwareFullscreenMode(); -static void _SetupMouseScaleAndOffset(); // Update mouse scale and offset according to current viewport +static void _SetupPlatformMouseScaleAndOffset(); // Update mouse scale and offset according to current viewport + +static void _SetPlatformMouseOffset(int offsetX, int offsetY); +static void _SetPlatformMouseScale(float scaleX, float scaleY); //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -1900,12 +1903,22 @@ static void WindowSizeCallback(GLFWwindow *window, int frameBufferWidth, int fra // We have to rescale and offset the mouse coordinate system // so that it always matches the offset and scale of the "screen" surface - _SetupMouseScaleAndOffset(); + _SetupPlatformMouseScaleAndOffset(); // NOTE: Postprocessing texture is not scaled to new size } -static void _SetupMouseScaleAndOffset() +static void _SetPlatformMouseOffset(int offsetX, int offsetY) +{ + CORE.Input.Mouse.platformOffset = (Vector2){ (float)offsetX, (float)offsetY }; +} + +static void _SetPlatformMouseScale(float scaleX, float scaleY) +{ + CORE.Input.Mouse.platformScale = (Vector2){ scaleX, scaleY }; +} + +static void _SetupPlatformMouseScaleAndOffset() { // Depending the current viewport and setup, we have to rescale and offset the mouse coordinate system // returned by Raylib's mouse API functions. @@ -1913,24 +1926,25 @@ static void _SetupMouseScaleAndOffset() // TODO : test __APPLE__ special case, @SoloByte mission #if defined(__APPLE__) - SetMouseScale(1.0, 1.0); + _SetPlatformMouseScale(1.0, 1.0); //!\ We don't use the user's side SetMouseScale() #else if (IsWindowState(FLAG_RESCALE_CONTENT) || (glfwGetPlatform() != GLFW_PLATFORM_WAYLAND)) { float mouseScaleX = (float)CORE.Window.screen.width/(float)CORE.Window.render.width; float mouseScaleY = (float)CORE.Window.screen.height/(float)CORE.Window.render.height; - SetMouseScale(mouseScaleX, mouseScaleY); + + _SetPlatformMouseScale(mouseScaleX, mouseScaleY); //!\ We don't use the user's side SetMouseScale() } else { - SetMouseScale(1.0, 1.0); + _SetPlatformMouseScale(1.0, 1.0); //!\ We don't use the user's side SetMouseScale() } #endif float mouseOffsetX = -0.5f*CORE.Window.renderOffset.x; float mouseOffsetY = -0.5f*CORE.Window.renderOffset.y; - SetMouseOffset( mouseOffsetX , mouseOffsetY ); + _SetPlatformMouseOffset(mouseOffsetX, mouseOffsetY); //!\ We don't use the user's side SetMouseOffset() }