From 8470767bc9a51ae73b2b70b4a5ed57f666fdc024 Mon Sep 17 00:00:00 2001 From: Oskari Timperi Date: Wed, 4 Dec 2019 19:13:43 +0200 Subject: Fix `IsMouseButtonReleased()` when press/release events come too fast If press/release events for a mouse button come too fast, then using `IsMouseButtonReleased()` does not work. This has been noticed when using a touchpad on Linux when tapping with two fingers two emulate right mouse button click. The situation looks like this: ``` BeginDrawing <-- current==released, previous==released Pressed <-- current=pressed Released <-- current=released IsMouseButtonReleased <-- returns false because current==previous EndDrawing <-- previous=released ``` The fix is to update the previous mouse button state in addition to current mouse button state when `MouseButtonCallback()` is called by glfw. Now the situation is as follows: ``` BeginDrawing <-- current==released, previous==released Pressed <-- current=pressed, previous=released Released <-- current=released, previous=pressed IsMouseButtonReleased <-- returns true because current!=previous EndDrawing <-- previous=released ``` --- src/core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core.c b/src/core.c index c82a0613..f048872f 100644 --- a/src/core.c +++ b/src/core.c @@ -3903,6 +3903,7 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i // GLFW3 Mouse Button Callback, runs on mouse button pressed static void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { + previousMouseState[button] = currentMouseState[button]; currentMouseState[button] = action; #if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES) -- cgit v1.2.3