1
2pub type Key = sdl2::keyboard::Keycode;
3pub type Mod = sdl2::keyboard::Mod;
4pub type MouseButton = sdl2::mouse::MouseButton;
5pub type MouseWheelDir = sdl2::mouse::MouseWheelDirection;
6
7
8#[derive(Debug, Clone)]
9pub enum Event {
10 Quit,
11 KeyDown { key: Key, modifier: Mod },
12 KeyUp { key: Key, modifier: Mod },
13 MouseMotion { x: i32, y: i32, x_rel: i32, y_rel: i32 },
14 MouseButtonDown { button: MouseButton, x: i32, y: i32 },
15 MouseButtonUp { button: MouseButton, x: i32, y: i32 },
16 MouseWheel { direction: MouseWheelDir, x: i32, y: i32 },
17 DropFile { filename: String },
18}
19
20impl Event {
21 pub fn from(value: sdl2::event::Event) -> Result<Self, sdl2::event::Event> {
22 match value {
23 sdl2::event::Event::Quit { .. } => Ok(Self::Quit),
24 sdl2::event::Event::KeyDown { keycode, keymod, .. } => Ok(Self::KeyDown { key: keycode.unwrap(), modifier: keymod }),
25 sdl2::event::Event::KeyUp { keycode, keymod, .. } => Ok(Self::KeyUp { key: keycode.unwrap(), modifier: keymod }),
26 sdl2::event::Event::MouseMotion { x, y, xrel, yrel, .. } => Ok(Self::MouseMotion { x, y, x_rel: xrel, y_rel: yrel }),
27 sdl2::event::Event::MouseButtonDown { mouse_btn, x, y, .. } => Ok(Self::MouseButtonDown { button: mouse_btn, x, y }),
28 sdl2::event::Event::MouseButtonUp { mouse_btn, x, y, .. } => Ok(Self::MouseButtonUp { button: mouse_btn, x, y }),
29 sdl2::event::Event::MouseWheel { x, y, direction, .. } => Ok(Self::MouseWheel { direction, x, y }),
30 sdl2::event::Event::DropFile { filename, .. } => Ok(Self::DropFile { filename }),
31 _ => Err(value)
32 }
33 }
34}