#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Key {
Char(char),
Enter,
Backspace,
Delete,
Escape,
Tab,
Space,
Up,
Down,
Left,
Right,
Home,
End,
PageUp,
PageDown,
LeftShift,
RightShift,
LeftCtrl,
RightCtrl,
LeftAlt,
RightAlt,
F(u8),
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MouseButton {
Left,
Right,
Middle,
}
#[derive(Clone, Copy, Debug)]
pub enum Event {
KeyDown(Key),
KeyUp(Key),
MouseMove { x: i32, y: i32 },
MouseButton {
x: i32,
y: i32,
button: MouseButton,
pressed: bool,
},
Scroll { delta: i32 },
Close,
Resize { width: u32, height: u32 },
}
impl Event {
pub fn is_close(&self) -> bool { matches!(self, Event::Close) }
pub fn as_char(&self) -> Option<char> {
if let Event::KeyDown(Key::Char(c)) = self { Some(*c) } else { None }
}
pub fn as_key_down(&self) -> Option<Key> {
if let Event::KeyDown(k) = self { Some(*k) } else { None }
}
pub fn as_mouse_btn(&self) -> Option<(i32, i32, MouseButton, bool)> {
if let Event::MouseButton { x, y, button, pressed } = self {
Some((*x, *y, *button, *pressed))
} else { None }
}
pub fn as_mouse_move(&self) -> Option<(i32, i32)> {
if let Event::MouseMove { x, y } = self { Some((*x, *y)) } else { None }
}
}