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