#[derive(Debug, Clone, PartialEq)]
pub enum Event {
Character(char),
Paste(String),
KeyWithModifiers(KeyWithModifiers),
KeyUp,
KeyDown,
KeyLeft,
KeyRight,
Delete,
Backspace,
Tab,
Enter,
Escape,
CapsLock,
FunctionKey(u8),
Keybind(crate::input::KeybindAction),
MouseMove { x: u16, y: u16 },
MouseClick { x: u16, y: u16, button: MouseButton },
MouseDrag { x: u16, y: u16, button: MouseButton },
MouseRelease { x: u16, y: u16, button: MouseButton },
MouseScroll { delta: i8 },
MouseScrollHorizontal { delta: i8 },
Resize { width: u16, height: u16 },
Frame,
Unknown,
}
impl Event {
pub fn as_legacy_key_event(&self) -> Option<Event> {
match self {
Event::KeyWithModifiers(k) => {
let legacy = match k.key {
KeyKind::Char(c) => Event::Character(c),
KeyKind::Up => Event::KeyUp,
KeyKind::Down => Event::KeyDown,
KeyKind::Left => Event::KeyLeft,
KeyKind::Right => Event::KeyRight,
KeyKind::Delete => Event::Delete,
KeyKind::Backspace => Event::Backspace,
KeyKind::Tab => Event::Tab,
KeyKind::Enter => Event::Enter,
KeyKind::Escape => Event::Escape,
KeyKind::CapsLock => Event::CapsLock,
KeyKind::Function(n) => Event::FunctionKey(n),
};
Some(legacy)
}
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct KeyModifiers {
pub shift: bool,
pub ctrl: bool,
pub alt: bool,
pub super_key: bool,
}
impl KeyModifiers {
pub const fn none() -> Self {
Self {
shift: false,
ctrl: false,
alt: false,
super_key: false,
}
}
pub const fn shift() -> Self {
Self {
shift: true,
ctrl: false,
alt: false,
super_key: false,
}
}
pub const fn ctrl() -> Self {
Self {
shift: false,
ctrl: true,
alt: false,
super_key: false,
}
}
pub const fn alt() -> Self {
Self {
shift: false,
ctrl: false,
alt: true,
super_key: false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyKind {
Char(char),
Up,
Down,
Left,
Right,
Delete,
Backspace,
Tab,
Enter,
Escape,
CapsLock,
Function(u8),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct KeyWithModifiers {
pub key: KeyKind,
pub mods: KeyModifiers,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MouseButton {
Left,
Right,
Middle,
Other(u8),
}