event.rs

  1use crate::{geometry::vector::Vector2F, keymap::Keystroke};
  2
  3#[derive(Clone, Debug)]
  4pub struct KeyDownEvent {
  5    pub keystroke: Keystroke,
  6    pub is_held: bool,
  7}
  8
  9#[derive(Clone, Debug)]
 10pub struct KeyUpEvent {
 11    pub keystroke: Keystroke,
 12}
 13
 14#[derive(Clone, Copy, Debug)]
 15pub struct ModifiersChangedEvent {
 16    pub ctrl: bool,
 17    pub alt: bool,
 18    pub shift: bool,
 19    pub cmd: bool,
 20}
 21
 22#[derive(Clone, Copy, Debug, Default)]
 23pub struct ScrollWheelEvent {
 24    pub position: Vector2F,
 25    pub delta: Vector2F,
 26    pub precise: bool,
 27    pub ctrl: bool,
 28    pub alt: bool,
 29    pub shift: bool,
 30    pub cmd: bool,
 31}
 32
 33#[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)]
 34pub enum NavigationDirection {
 35    Back,
 36    Forward,
 37}
 38
 39impl Default for NavigationDirection {
 40    fn default() -> Self {
 41        Self::Back
 42    }
 43}
 44
 45#[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)]
 46pub enum MouseButton {
 47    Left,
 48    Right,
 49    Middle,
 50    Navigate(NavigationDirection),
 51}
 52
 53impl MouseButton {
 54    pub fn all() -> Vec<Self> {
 55        vec![
 56            MouseButton::Left,
 57            MouseButton::Right,
 58            MouseButton::Middle,
 59            MouseButton::Navigate(NavigationDirection::Back),
 60            MouseButton::Navigate(NavigationDirection::Forward),
 61        ]
 62    }
 63}
 64
 65impl Default for MouseButton {
 66    fn default() -> Self {
 67        Self::Left
 68    }
 69}
 70
 71#[derive(Clone, Copy, Debug, Default)]
 72pub struct MouseButtonEvent {
 73    pub button: MouseButton,
 74    pub position: Vector2F,
 75    pub ctrl: bool,
 76    pub alt: bool,
 77    pub shift: bool,
 78    pub cmd: bool,
 79    pub click_count: usize,
 80}
 81
 82#[derive(Clone, Copy, Debug, Default)]
 83pub struct MouseMovedEvent {
 84    pub position: Vector2F,
 85    pub pressed_button: Option<MouseButton>,
 86    pub ctrl: bool,
 87    pub cmd: bool,
 88    pub alt: bool,
 89    pub shift: bool,
 90}
 91
 92#[derive(Clone, Debug)]
 93pub enum Event {
 94    KeyDown(KeyDownEvent),
 95    KeyUp(KeyUpEvent),
 96    ModifiersChanged(ModifiersChangedEvent),
 97    MouseDown(MouseButtonEvent),
 98    MouseUp(MouseButtonEvent),
 99    MouseMoved(MouseMovedEvent),
100    ScrollWheel(ScrollWheelEvent),
101}
102
103impl Event {
104    pub fn position(&self) -> Option<Vector2F> {
105        match self {
106            Event::KeyDown { .. } => None,
107            Event::KeyUp { .. } => None,
108            Event::ModifiersChanged { .. } => None,
109            Event::MouseDown(event) | Event::MouseUp(event) => Some(event.position),
110            Event::MouseMoved(event) => Some(event.position),
111            Event::ScrollWheel(event) => Some(event.position),
112        }
113    }
114}