From 8d0e9abffcce52661522d01e022570fa25e89e70 Mon Sep 17 00:00:00 2001 From: Andrea Pessino Date: Fri, 21 Jan 2022 11:26:43 -0800 Subject: [PATCH 1/3] Fixed phase tracking --- src/platform_impl/macos/view.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 20f18b6408..89692917bf 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -1016,8 +1016,12 @@ extern "C" fn scroll_wheel(this: &Object, _sel: Sel, event: id) { NSEventPhase::NSEventPhaseMayBegin | NSEventPhase::NSEventPhaseBegan => { TouchPhase::Started } - NSEventPhase::NSEventPhaseEnded => TouchPhase::Ended, - _ => TouchPhase::Moved, + NSEventPhase::NSEventPhaseEnded | NSEventPhase::NSEventPhaseCancelled => { + TouchPhase::Ended + } + _ => { + TouchPhase::Moved + } }; let device_event = Event::DeviceEvent { From 34b42221a8aa11af301a8e80f5265efc4e2aa3f9 Mon Sep 17 00:00:00 2001 From: Andrea Pessino Date: Fri, 21 Jan 2022 15:41:12 -0800 Subject: [PATCH 2/3] Ran cargo fmt --- src/platform_impl/macos/view.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 89692917bf..98221daca1 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -1019,9 +1019,7 @@ extern "C" fn scroll_wheel(this: &Object, _sel: Sel, event: id) { NSEventPhase::NSEventPhaseEnded | NSEventPhase::NSEventPhaseCancelled => { TouchPhase::Ended } - _ => { - TouchPhase::Moved - } + _ => TouchPhase::Moved, }; let device_event = Event::DeviceEvent { From 7471d43ddf033dc8f2f81599807ac04f900c14c3 Mon Sep 17 00:00:00 2001 From: Andrea Pessino Date: Sat, 29 Jan 2022 15:41:34 -0800 Subject: [PATCH 3/3] Added momentum phase handling --- src/platform_impl/macos/view.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 98221daca1..bafc9297df 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -1012,14 +1012,27 @@ extern "C" fn scroll_wheel(this: &Object, _sel: Sel, event: id) { MouseScrollDelta::LineDelta(x as f32, y as f32) } }; - let phase = match event.phase() { + + // The "momentum phase," if any, has higher priority than touch phase (the two should + // be mutually exclusive anyhow, which is why the API is rather incoherent). If no momentum + // phase is recorded (or rather, the started/ended cases of the momentum phase) then we + // report the touch phase. + let phase = match event.momentumPhase() { NSEventPhase::NSEventPhaseMayBegin | NSEventPhase::NSEventPhaseBegan => { TouchPhase::Started } NSEventPhase::NSEventPhaseEnded | NSEventPhase::NSEventPhaseCancelled => { TouchPhase::Ended } - _ => TouchPhase::Moved, + _ => match event.phase() { + NSEventPhase::NSEventPhaseMayBegin | NSEventPhase::NSEventPhaseBegan => { + TouchPhase::Started + } + NSEventPhase::NSEventPhaseEnded | NSEventPhase::NSEventPhaseCancelled => { + TouchPhase::Ended + } + _ => TouchPhase::Moved, + }, }; let device_event = Event::DeviceEvent {