Browse Source

Fix `IsMouseButtonReleased()` when press/release events come too fast (#1032)

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
```
pull/1034/head
Oskari Timperi 5 years ago
committed by Ray
parent
commit
8a08a9b225
1 changed files with 1 additions and 0 deletions
  1. +1
    -0
      src/core.c

+ 1
- 0
src/core.c View File

@ -3907,6 +3907,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)

Loading…
Cancel
Save