use crate::key::{Key, KeyModifiers};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Event {
Key(Key),
KeyWithModifiers(Key, KeyModifiers),
Mouse(MouseEvent),
Resize(u16, u16),
FocusGained,
FocusLost,
Paste(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MouseEvent {
pub kind: MouseEventKind,
pub column: u16,
pub row: u16,
pub modifiers: KeyModifiers,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MouseEventKind {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Moved,
ScrollUp,
ScrollDown,
ScrollLeft,
ScrollRight,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MouseButton {
Left,
Right,
Middle,
}
impl Event {
#[must_use]
pub const fn is_key(&self) -> bool {
matches!(self, Event::Key(_) | Event::KeyWithModifiers(_, _))
}
#[must_use]
pub const fn is_mouse(&self) -> bool {
matches!(self, Event::Mouse(_))
}
#[must_use]
pub const fn is_resize(&self) -> bool {
matches!(self, Event::Resize(_, _))
}
#[must_use]
pub const fn key(&self) -> Option<Key> {
match self {
Event::Key(k) | Event::KeyWithModifiers(k, _) => Some(*k),
_ => None,
}
}
}