mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Add smart magnify gesture support for macOS (#2554)
* Add smart magnification gesture * Deliver position of smart magnification event * Document smart magnification event * Revert "Deliver position of smart magnification event" This reverts commit ac0e61a9a4e67bf54fc80230660051d366846bd4. * Remove mention of touchpad from smart magnification event * Update change log * Mention minimum macOS version supporting smart magnification * Improve doc
This commit is contained in:
parent
a867032e1e
commit
d448d3e14f
|
@ -40,7 +40,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
- **Breaking:** Split the `platform::unix` module into `platform::x11` and `platform::wayland`. The extension types are similarly renamed.
|
- **Breaking:** Split the `platform::unix` module into `platform::x11` and `platform::wayland`. The extension types are similarly renamed.
|
||||||
- **Breaking:**: Removed deprecated method `platform::unix::WindowExtUnix::is_ready`.
|
- **Breaking:**: Removed deprecated method `platform::unix::WindowExtUnix::is_ready`.
|
||||||
- Removed `parking_lot` dependency.
|
- Removed `parking_lot` dependency.
|
||||||
- **Breaking:** On macOS, add support for two-finger touchpad magnification and rotation gestures with new events `WindowEvent::TouchpadMagnify` and `WindowEvent::TouchpadRotate`.
|
- **Breaking:** On macOS, add support for two-finger touchpad magnification and rotation gestures with new events `WindowEvent::TouchpadMagnify` and `WindowEvent::TouchpadRotate`. Also add support for touchpad smart-magnification gesture with a new event `WindowEvent::SmartMagnify`.
|
||||||
- **Breaking:** On web, the `WindowBuilderExtWebSys::with_prevent_default` setting (enabled by default), now additionally prevents scrolling of the webpage in mobile browsers, previously it only disabled scrolling on desktop.
|
- **Breaking:** On web, the `WindowBuilderExtWebSys::with_prevent_default` setting (enabled by default), now additionally prevents scrolling of the webpage in mobile browsers, previously it only disabled scrolling on desktop.
|
||||||
- On Wayland, `wayland-csd-adwaita` now uses `ab_glyph` instead of `crossfont` to render the title for decorations.
|
- On Wayland, `wayland-csd-adwaita` now uses `ab_glyph` instead of `crossfont` to render the title for decorations.
|
||||||
- On Wayland, a new `wayland-csd-adwaita-crossfont` feature was added to use `crossfont` instead of `ab_glyph` for decorations.
|
- On Wayland, a new `wayland-csd-adwaita-crossfont` feature was added to use `crossfont` instead of `ab_glyph` for decorations.
|
||||||
|
|
|
@ -29,6 +29,9 @@ fn main() {
|
||||||
println!("Zoomed out {}", delta);
|
println!("Zoomed out {}", delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
WindowEvent::SmartMagnify { .. } => {
|
||||||
|
println!("Smart zoom");
|
||||||
|
}
|
||||||
WindowEvent::TouchpadRotate { delta, .. } => {
|
WindowEvent::TouchpadRotate { delta, .. } => {
|
||||||
if delta > 0.0 {
|
if delta > 0.0 {
|
||||||
println!("Rotated counterclockwise {}", delta);
|
println!("Rotated counterclockwise {}", delta);
|
||||||
|
|
23
src/event.rs
23
src/event.rs
|
@ -444,6 +444,25 @@ pub enum WindowEvent<'a> {
|
||||||
phase: TouchPhase,
|
phase: TouchPhase,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// Smart magnification event.
|
||||||
|
///
|
||||||
|
/// On a Mac, smart magnification is triggered by a double tap with two fingers
|
||||||
|
/// on the trackpad and is commonly used to zoom on a certain object
|
||||||
|
/// (e.g. a paragraph of a PDF) or (sort of like a toggle) to reset any zoom.
|
||||||
|
/// The gesture is also supported in Safari, Pages, etc.
|
||||||
|
///
|
||||||
|
/// The event is general enough that its generating gesture is allowed to vary
|
||||||
|
/// across platforms. It could also be generated by another device.
|
||||||
|
///
|
||||||
|
/// Unfortunatly, neither [Windows](https://support.microsoft.com/en-us/windows/touch-gestures-for-windows-a9d28305-4818-a5df-4e2b-e5590f850741)
|
||||||
|
/// nor [Wayland](https://wayland.freedesktop.org/libinput/doc/latest/gestures.html)
|
||||||
|
/// support this gesture or any other gesture with the same effect.
|
||||||
|
///
|
||||||
|
/// ## Platform-specific
|
||||||
|
///
|
||||||
|
/// - Only available on **macOS 10.8** and later.
|
||||||
|
SmartMagnify { device_id: DeviceId },
|
||||||
|
|
||||||
/// Touchpad rotation event with two-finger rotation gesture.
|
/// Touchpad rotation event with two-finger rotation gesture.
|
||||||
///
|
///
|
||||||
/// Positive delta values indicate rotation counterclockwise and
|
/// Positive delta values indicate rotation counterclockwise and
|
||||||
|
@ -594,6 +613,9 @@ impl Clone for WindowEvent<'static> {
|
||||||
delta: *delta,
|
delta: *delta,
|
||||||
phase: *phase,
|
phase: *phase,
|
||||||
},
|
},
|
||||||
|
SmartMagnify { device_id } => SmartMagnify {
|
||||||
|
device_id: *device_id,
|
||||||
|
},
|
||||||
TouchpadRotate {
|
TouchpadRotate {
|
||||||
device_id,
|
device_id,
|
||||||
delta,
|
delta,
|
||||||
|
@ -700,6 +722,7 @@ impl<'a> WindowEvent<'a> {
|
||||||
delta,
|
delta,
|
||||||
phase,
|
phase,
|
||||||
}),
|
}),
|
||||||
|
SmartMagnify { device_id } => Some(SmartMagnify { device_id }),
|
||||||
TouchpadRotate {
|
TouchpadRotate {
|
||||||
device_id,
|
device_id,
|
||||||
delta,
|
delta,
|
||||||
|
|
|
@ -858,6 +858,20 @@ declare_class!(
|
||||||
AppState::queue_event(EventWrapper::StaticEvent(window_event));
|
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::SmartMagnify {
|
||||||
|
device_id: DEVICE_ID,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
AppState::queue_event(EventWrapper::StaticEvent(window_event));
|
||||||
|
}
|
||||||
|
|
||||||
#[sel(rotateWithEvent:)]
|
#[sel(rotateWithEvent:)]
|
||||||
fn rotate_with_event(&self, event: &NSEvent) {
|
fn rotate_with_event(&self, event: &NSEvent) {
|
||||||
trace_scope!("rotateWithEvent:");
|
trace_scope!("rotateWithEvent:");
|
||||||
|
|
Loading…
Reference in a new issue