From ac0e61a9a4e67bf54fc80230660051d366846bd4 Mon Sep 17 00:00:00 2001 From: Jim Eckerlein Date: Fri, 11 Nov 2022 12:16:46 +0100 Subject: [PATCH] Deliver position of smart magnification event --- examples/touchpad_gestures.rs | 4 ++-- src/event.rs | 19 ++++++++++++++++--- src/platform_impl/macos/view.rs | 11 ++++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/examples/touchpad_gestures.rs b/examples/touchpad_gestures.rs index eb9a9cae6..d120273cf 100644 --- a/examples/touchpad_gestures.rs +++ b/examples/touchpad_gestures.rs @@ -29,8 +29,8 @@ fn main() { println!("Zoomed out {}", delta); } } - WindowEvent::TouchpadSmartMagnify { .. } => { - println!("Smart zoom"); + WindowEvent::TouchpadSmartMagnify { position, .. } => { + println!("Smart zoom at {position:?}"); } WindowEvent::TouchpadRotate { delta, .. } => { if delta > 0.0 { diff --git a/src/event.rs b/src/event.rs index 574a73195..bc6a2b448 100644 --- a/src/event.rs +++ b/src/event.rs @@ -449,7 +449,10 @@ pub enum WindowEvent<'a> { /// ## Platform-specific /// /// - Only available on **macOS**. - TouchpadSmartMagnify { device_id: DeviceId }, + TouchpadSmartMagnify { + device_id: DeviceId, + position: PhysicalPosition, + }, /// Touchpad rotation event with two-finger rotation gesture. /// @@ -597,8 +600,12 @@ impl Clone for WindowEvent<'static> { delta: *delta, phase: *phase, }, - TouchpadSmartMagnify { device_id } => TouchpadSmartMagnify { + TouchpadSmartMagnify { + device_id, + position, + } => TouchpadSmartMagnify { device_id: *device_id, + position: *position, }, TouchpadRotate { device_id, @@ -706,7 +713,13 @@ impl<'a> WindowEvent<'a> { delta, phase, }), - TouchpadSmartMagnify { device_id } => Some(TouchpadSmartMagnify { device_id }), + TouchpadSmartMagnify { + device_id, + position, + } => Some(TouchpadSmartMagnify { + device_id, + position, + }), TouchpadRotate { device_id, delta, diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index c2c90771d..c95309df6 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -860,13 +860,22 @@ declare_class!( } #[sel(smartMagnifyWithEvent:)] - fn smart_magnify_with_event(&self, _event: &NSEvent) { + fn smart_magnify_with_event(&self, event: &NSEvent) { trace_scope!("smartMagnifyWithEvent:"); + let window_point = event.locationInWindow(); + let view_point = self.convertPoint_fromView(window_point, None); + let view_rect = self.frame(); + + let x = view_point.x as f64; + let y = view_rect.size.height as f64 - view_point.y as f64; + let logical_position = LogicalPosition::new(x, y); + let window_event = Event::WindowEvent { window_id: self.window_id(), event: WindowEvent::TouchpadSmartMagnify { device_id: DEVICE_ID, + position: logical_position.to_physical(self.scale_factor()), }, };