Polished scrolling significantly

This commit is contained in:
Mikayla Maki 2022-09-02 15:47:35 -07:00
parent 0588360bf0
commit 1502c19208
3 changed files with 81 additions and 37 deletions

View file

@ -19,6 +19,15 @@ pub struct ModifiersChangedEvent {
pub cmd: bool,
}
/// The phase of a touch motion event.
/// Based on the winit enum of the same name,
#[derive(Clone, Copy, Debug)]
pub enum TouchPhase {
Started,
Moved,
Ended,
}
#[derive(Clone, Copy, Debug, Default)]
pub struct ScrollWheelEvent {
pub position: Vector2F,
@ -28,6 +37,8 @@ pub struct ScrollWheelEvent {
pub alt: bool,
pub shift: bool,
pub cmd: bool,
/// If the platform supports returning the phase of a scroll wheel event, it will be stored here
pub phase: Option<TouchPhase>,
}
#[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)]

View file

@ -3,10 +3,10 @@ use crate::{
keymap::Keystroke,
platform::{Event, NavigationDirection},
KeyDownEvent, KeyUpEvent, ModifiersChangedEvent, MouseButton, MouseButtonEvent,
MouseMovedEvent, ScrollWheelEvent,
MouseMovedEvent, ScrollWheelEvent, TouchPhase,
};
use cocoa::{
appkit::{NSEvent, NSEventModifierFlags, NSEventType},
appkit::{NSEvent, NSEventModifierFlags, NSEventPhase, NSEventType},
base::{id, YES},
foundation::NSString as _,
};
@ -150,6 +150,14 @@ impl Event {
NSEventType::NSScrollWheel => window_height.map(|window_height| {
let modifiers = native_event.modifierFlags();
let phase = match native_event.phase() {
NSEventPhase::NSEventPhaseMayBegin | NSEventPhase::NSEventPhaseBegan => {
Some(TouchPhase::Started)
}
NSEventPhase::NSEventPhaseEnded => Some(TouchPhase::Ended),
_ => Some(TouchPhase::Moved),
};
Self::ScrollWheel(ScrollWheelEvent {
position: vec2f(
native_event.locationInWindow().x as f32,
@ -159,6 +167,7 @@ impl Event {
native_event.scrollingDeltaX() as f32,
native_event.scrollingDeltaY() as f32,
),
phase,
precise: native_event.hasPreciseScrollingDeltas() == YES,
ctrl: modifiers.contains(NSEventModifierFlags::NSControlKeyMask),
alt: modifiers.contains(NSEventModifierFlags::NSAlternateKeyMask),