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
```
This commit is contained in:
Oskari Timperi 2019-12-04 19:13:43 +02:00
parent 3d936061c8
commit 8470767bc9

View File

@ -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 // GLFW3 Mouse Button Callback, runs on mouse button pressed
static void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) static void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods)
{ {
previousMouseState[button] = currentMouseState[button];
currentMouseState[button] = action; currentMouseState[button] = action;
#if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES) #if defined(SUPPORT_GESTURES_SYSTEM) && defined(SUPPORT_MOUSE_GESTURES)