Combine platform mouse events to use common MouseEvent struct and remove MouseDragged event in favor of MouseMoved

This commit is contained in:
Keith Simmons 2022-07-06 16:37:56 -07:00
parent 686e57373b
commit bcb553f233
8 changed files with 172 additions and 163 deletions

View file

@ -1,11 +1,5 @@
use crate::{geometry::vector::Vector2F, keymap::Keystroke};
#[derive(Copy, Clone, Debug)]
pub enum NavigationDirection {
Back,
Forward,
}
#[derive(Clone, Debug)]
pub struct KeyDownEvent {
pub keystroke: Keystroke,
@ -34,8 +28,23 @@ pub struct ScrollWheelEvent {
pub precise: bool,
}
#[derive(Copy, Clone, Debug)]
pub enum NavigationDirection {
Back,
Forward,
}
#[derive(Copy, Clone, Debug)]
pub enum MouseButton {
Left,
Right,
Middle,
Navigate(NavigationDirection),
}
#[derive(Clone, Debug)]
pub struct LeftMouseDownEvent {
pub struct MouseEvent {
pub button: MouseButton,
pub position: Vector2F,
pub ctrl: bool,
pub alt: bool,
@ -44,58 +53,10 @@ pub struct LeftMouseDownEvent {
pub click_count: usize,
}
#[derive(Clone, Debug)]
pub struct LeftMouseUpEvent {
pub position: Vector2F,
pub click_count: usize,
}
#[derive(Clone, Debug)]
pub struct LeftMouseDraggedEvent {
pub position: Vector2F,
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
pub cmd: bool,
}
#[derive(Clone, Debug)]
pub struct RightMouseDownEvent {
pub position: Vector2F,
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
pub cmd: bool,
pub click_count: usize,
}
#[derive(Clone, Debug)]
pub struct RightMouseUpEvent {
pub position: Vector2F,
pub click_count: usize,
}
#[derive(Clone, Debug)]
pub struct NavigateMouseDownEvent {
pub position: Vector2F,
pub direction: NavigationDirection,
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
pub cmd: bool,
pub click_count: usize,
}
#[derive(Clone, Debug)]
pub struct NavigateMouseUpEvent {
pub position: Vector2F,
pub direction: NavigationDirection,
}
#[derive(Clone, Debug)]
#[derive(Clone, Copy, Debug)]
pub struct MouseMovedEvent {
pub position: Vector2F,
pub left_mouse_down: bool,
pub pressed_button: Option<MouseButton>,
pub ctrl: bool,
pub cmd: bool,
pub alt: bool,
@ -107,15 +68,10 @@ pub enum Event {
KeyDown(KeyDownEvent),
KeyUp(KeyUpEvent),
ModifiersChanged(ModifiersChangedEvent),
ScrollWheel(ScrollWheelEvent),
LeftMouseDown(LeftMouseDownEvent),
LeftMouseUp(LeftMouseUpEvent),
LeftMouseDragged(LeftMouseDraggedEvent),
RightMouseDown(RightMouseDownEvent),
RightMouseUp(RightMouseUpEvent),
NavigateMouseDown(NavigateMouseDownEvent),
NavigateMouseUp(NavigateMouseUpEvent),
MouseDown(MouseEvent),
MouseUp(MouseEvent),
MouseMoved(MouseMovedEvent),
ScrollWheel(ScrollWheelEvent),
}
impl Event {
@ -124,15 +80,9 @@ impl Event {
Event::KeyDown { .. } => None,
Event::KeyUp { .. } => None,
Event::ModifiersChanged { .. } => None,
Event::ScrollWheel(ScrollWheelEvent { position, .. })
| Event::LeftMouseDown(LeftMouseDownEvent { position, .. })
| Event::LeftMouseUp(LeftMouseUpEvent { position, .. })
| Event::LeftMouseDragged(LeftMouseDraggedEvent { position, .. })
| Event::RightMouseDown(RightMouseDownEvent { position, .. })
| Event::RightMouseUp(RightMouseUpEvent { position, .. })
| Event::NavigateMouseDown(NavigateMouseDownEvent { position, .. })
| Event::NavigateMouseUp(NavigateMouseUpEvent { position, .. })
| Event::MouseMoved(MouseMovedEvent { position, .. }) => Some(*position),
Event::MouseDown(event) | Event::MouseUp(event) => Some(event.position),
Event::MouseMoved(event) => Some(event.position),
Event::ScrollWheel(event) => Some(event.position),
}
}
}