diff options
| author | Andre Weissflog <floooh@gmail.com> | 2023-05-20 14:22:13 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2023-05-20 14:22:13 +0200 |
| commit | cb15c7e4a8266e09979855d54f4475afa7b8af2a (patch) | |
| tree | 4ff7d1c5e5c6e63c8f29efbb00bc48fd56458787 | |
| parent | f002bf631b9afec068a9eb8c2dad865c4a292ac9 (diff) | |
sokol_app.h x11: SAPP_EVENTTYPE_MOUSE_ENTER/LEAVE set dx/dy to zero
| -rw-r--r-- | sokol_app.h | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/sokol_app.h b/sokol_app.h index d952288b..8ceaddba 100644 --- a/sokol_app.h +++ b/sokol_app.h @@ -10119,11 +10119,14 @@ _SOKOL_PRIVATE sapp_mousebutton _sapp_x11_translate_button(const XEvent* event) } } -_SOKOL_PRIVATE void _sapp_x11_mouse_update(int x, int y) { +_SOKOL_PRIVATE void _sapp_x11_mouse_update(int x, int y, bool clear_dxdy) { if (!_sapp.mouse.locked) { const float new_x = (float) x; const float new_y = (float) y; - if (_sapp.mouse.pos_valid) { + if (clear_dxdy) { + _sapp.mouse.dx = 0.0f; + _sapp.mouse.dy = 0.0f; + } else if (_sapp.mouse.pos_valid) { _sapp.mouse.dx = new_x - _sapp.mouse.x; _sapp.mouse.dy = new_y - _sapp.mouse.y; } @@ -10512,7 +10515,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { break; case ButtonPress: { - _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y); + _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); const sapp_mousebutton btn = _sapp_x11_translate_button(event); uint32_t mods = _sapp_x11_mods(event->xbutton.state); // X11 doesn't set modifier bit on button down, so emulate that @@ -10534,7 +10537,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { break; case ButtonRelease: { - _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y); + _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); const sapp_mousebutton btn = _sapp_x11_translate_button(event); if (btn != SAPP_MOUSEBUTTON_INVALID) { uint32_t mods = _sapp_x11_mods(event->xbutton.state); @@ -10548,19 +10551,19 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { case EnterNotify: /* don't send enter/leave events while mouse button held down */ if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y); + _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); } break; case LeaveNotify: if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y); + _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); } break; case MotionNotify: if (!_sapp.mouse.locked) { - _sapp_x11_mouse_update(event->xmotion.x, event->xmotion.y); + _sapp_x11_mouse_update(event->xmotion.x, event->xmotion.y, false); _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); } break; |