use crate::geom::Size;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Key {
Char(char),
Enter,
Esc,
Backspace,
Tab,
Up,
Down,
Left,
Right,
Delete,
Home,
End,
PageUp,
PageDown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Modifiers {
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct KeyEvent {
pub key: Key,
pub modifiers: Modifiers,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MouseKind {
Down,
Up,
ScrollUp,
ScrollDown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MouseEvent {
pub x: u16,
pub y: u16,
pub kind: MouseKind,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EventPhase {
Capture,
Target,
Bubble,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct WorkerId(pub u64);
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Event {
Key(KeyEvent),
Mouse(MouseEvent),
Resize(Size),
Focus,
Blur,
Tick,
TaskComplete(String),
WorkerDone(WorkerId, String),
Timer(u64),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Command {
Quit,
FocusNext,
FocusPrev,
Custom(String),
}
impl Event {
pub fn is_key(&self, key: Key) -> bool {
matches!(self, Event::Key(KeyEvent { key: k, .. }) if *k == key)
}
}