#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Event {
Key(Key),
Mouse(Mouse),
Paste(String),
Resize {
width: u16,
height: u16,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Key {
pub code: KeyCode,
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
}
impl Key {
pub fn new(code: KeyCode) -> Self {
Self {
code,
ctrl: false,
alt: false,
shift: false,
}
}
pub fn plain(&self) -> bool {
!self.ctrl && !self.alt
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum KeyCode {
Char(char),
Enter,
Esc,
Backspace,
Delete,
Tab,
BackTab,
Up,
Down,
Left,
Right,
Home,
End,
PageUp,
PageDown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Mouse {
pub kind: MouseKind,
pub column: u16,
pub row: u16,
pub shift: bool,
pub ctrl: bool,
pub alt: bool,
pub super_key: bool,
}
impl Mouse {
pub fn at(kind: MouseKind, column: u16, row: u16) -> Self {
Self {
kind,
column,
row,
shift: false,
ctrl: false,
alt: false,
super_key: false,
}
}
pub fn plain(&self) -> bool {
!self.shift && !self.ctrl && !self.alt && !self.super_key
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MouseButton {
Left,
Right,
Middle,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MouseKind {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Moved,
ScrollUp,
ScrollDown,
ScrollLeft,
ScrollRight,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum EventFlow {
Consumed,
Ignored,
}
impl EventFlow {
pub fn consumed(self) -> bool {
matches!(self, EventFlow::Consumed)
}
}