visim/
event.rs

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}