aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2023-05-20 14:22:13 +0200
committerAndre Weissflog <floooh@gmail.com>2023-05-20 14:22:13 +0200
commitcb15c7e4a8266e09979855d54f4475afa7b8af2a (patch)
tree4ff7d1c5e5c6e63c8f29efbb00bc48fd56458787
parentf002bf631b9afec068a9eb8c2dad865c4a292ac9 (diff)
sokol_app.h x11: SAPP_EVENTTYPE_MOUSE_ENTER/LEAVE set dx/dy to zero
-rw-r--r--sokol_app.h17
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;