From cdcaa561da5b515903eb27387c521100a3e0545c Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Fri, 11 Nov 2022 12:11:09 +0100 Subject: [PATCH] Add smart magnification gesture --- examples/touchpad_gestures.rs | 3 +++ src/event.rs | 11 +++++++++++ src/platform_impl/macos/view.rs | 14 ++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/examples/touchpad_gestures.rs b/examples/touchpad_gestures.rs index 85d9e967f..eb9a9cae6 100644 --- a/examples/touchpad_gestures.rs +++ b/examples/touchpad_gestures.rs @@ -29,6 +29,9 @@ fn main() { println!("Zoomed out {}", delta); } } + WindowEvent::TouchpadSmartMagnify { .. } => { + println!("Smart zoom"); + } WindowEvent::TouchpadRotate { delta, .. } => { if delta > 0.0 { println!("Rotated counterclockwise {}", delta); diff --git a/src/event.rs b/src/event.rs index da237672c..574a73195 100644 --- a/src/event.rs +++ b/src/event.rs @@ -444,6 +444,13 @@ pub enum WindowEvent<'a> { phase: TouchPhase, }, + /// Touchpad smart magnification event. + /// + /// ## Platform-specific + /// + /// - Only available on **macOS**. + TouchpadSmartMagnify { device_id: DeviceId }, + /// Touchpad rotation event with two-finger rotation gesture. /// /// Positive delta values indicate rotation counterclockwise and @@ -590,6 +597,9 @@ impl Clone for WindowEvent<'static> { delta: *delta, phase: *phase, }, + TouchpadSmartMagnify { device_id } => TouchpadSmartMagnify { + device_id: *device_id, + }, TouchpadRotate { device_id, delta, @@ -696,6 +706,7 @@ impl<'a> WindowEvent<'a> { delta, phase, }), + TouchpadSmartMagnify { device_id } => Some(TouchpadSmartMagnify { device_id }), TouchpadRotate { device_id, delta, diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index dd1e17d51..c2c90771d 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -859,6 +859,20 @@ declare_class!( AppState::queue_event(EventWrapper::StaticEvent(window_event)); } + #[sel(smartMagnifyWithEvent:)] + fn smart_magnify_with_event(&self, _event: &NSEvent) { + trace_scope!("smartMagnifyWithEvent:"); + + let window_event = Event::WindowEvent { + window_id: self.window_id(), + event: WindowEvent::TouchpadSmartMagnify { + device_id: DEVICE_ID, + }, + }; + + AppState::queue_event(EventWrapper::StaticEvent(window_event)); + } + #[sel(rotateWithEvent:)] fn rotate_with_event(&self, event: &NSEvent) { trace_scope!("rotateWithEvent:");