aboutsummaryrefslogtreecommitdiff
path: root/sokol_app.h
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2023-01-15 13:48:36 +0100
committerAndre Weissflog <floooh@gmail.com>2023-01-15 13:48:36 +0100
commit73e2845da512bf5ddbc14558cbf91e277a3d8444 (patch)
tree67667752a5ab3c37f0b8306f72aa588b736b1a9c /sokol_app.h
parent123286734487c8f238f7d452877b7c8b11698f39 (diff)
sokol_app.h macos: force mouse delta to 0 for all non-move-events
Diffstat (limited to 'sokol_app.h')
-rw-r--r--sokol_app.h36
1 files changed, 20 insertions, 16 deletions
diff --git a/sokol_app.h b/sokol_app.h
index 7ebd4c79..c2e3ab42 100644
--- a/sokol_app.h
+++ b/sokol_app.h
@@ -3505,13 +3505,17 @@ _SOKOL_PRIVATE void _sapp_macos_update_window_title(void) {
[_sapp.macos.window setTitle: [NSString stringWithUTF8String:_sapp.window_title]];
}
-_SOKOL_PRIVATE void _sapp_macos_update_mouse(NSEvent* event) {
+_SOKOL_PRIVATE void _sapp_macos_update_mouse(NSEvent* event, bool no_delta) {
if (!_sapp.mouse.locked) {
const NSPoint mouse_pos = event.locationInWindow;
float new_x = mouse_pos.x * _sapp.dpi_scale;
float new_y = _sapp.framebuffer_height - (mouse_pos.y * _sapp.dpi_scale) - 1;
- /* don't update dx/dy in the very first update */
- if (_sapp.mouse.pos_valid) {
+ if (no_delta) {
+ _sapp.mouse.dx = 0.0f;
+ _sapp.mouse.dy = 0.0f;
+ }
+ else if (_sapp.mouse.pos_valid) {
+ // don't update dx/dy in the very first update
_sapp.mouse.dx = new_x - _sapp.mouse.x;
_sapp.mouse.dy = new_y - _sapp.mouse.y;
}
@@ -3975,7 +3979,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
[super updateTrackingAreas];
}
- (void)mouseEntered:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
/* don't send mouse enter/leave while dragging (so that it behaves the same as
on Windows while SetCapture is active
*/
@@ -3984,47 +3988,47 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
}
}
- (void)mouseExited:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
if (0 == _sapp.macos.mouse_buttons) {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event));
}
}
- (void)mouseDown:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_LEFT);
}
- (void)mouseUp:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons &= ~(1<<SAPP_MOUSEBUTTON_LEFT);
}
- (void)rightMouseDown:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_RIGHT);
}
- (void)rightMouseUp:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons &= ~(1<<SAPP_MOUSEBUTTON_RIGHT);
}
- (void)otherMouseDown:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
if (2 == event.buttonNumber) {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_MIDDLE);
}
}
- (void)otherMouseUp:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
if (2 == event.buttonNumber) {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mods(event));
_sapp.macos.mouse_buttons &= (1<<SAPP_MOUSEBUTTON_MIDDLE);
}
}
- (void)otherMouseDragged:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, false);
if (2 == event.buttonNumber) {
if (_sapp.mouse.locked) {
_sapp.mouse.dx = [event deltaX];
@@ -4034,7 +4038,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
}
}
- (void)mouseMoved:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, false);
if (_sapp.mouse.locked) {
_sapp.mouse.dx = [event deltaX];
_sapp.mouse.dy = [event deltaY];
@@ -4042,7 +4046,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mods(event));
}
- (void)mouseDragged:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, false);
if (_sapp.mouse.locked) {
_sapp.mouse.dx = [event deltaX];
_sapp.mouse.dy = [event deltaY];
@@ -4050,7 +4054,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mods(event));
}
- (void)rightMouseDragged:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, false);
if (_sapp.mouse.locked) {
_sapp.mouse.dx = [event deltaX];
_sapp.mouse.dy = [event deltaY];
@@ -4058,7 +4062,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() {
_sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event));
}
- (void)scrollWheel:(NSEvent*)event {
- _sapp_macos_update_mouse(event);
+ _sapp_macos_update_mouse(event, true);
if (_sapp_events_enabled()) {
float dx = (float) event.scrollingDeltaX;
float dy = (float) event.scrollingDeltaY;