event.rs

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