1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use super::*;
use fermium::{SDL_Event, SDL_EventType};
mod quit;
pub use quit::*;
mod window;
pub use window::*;
mod motion;
pub use motion::*;
mod button;
pub use button::*;
mod wheel;
pub use wheel::*;
mod key;
pub use key::*;
mod cdevice;
pub use cdevice::*;
mod cbutton;
pub use cbutton::*;
mod caxis;
pub use caxis::*;
#[allow(missing_docs)]
pub enum Event {
Quit(QuitEvent),
Window(WindowEvent),
MouseMotion(MouseMotionEvent),
MouseButton(MouseButtonEvent),
MouseWheel(MouseWheelEvent),
Keyboard(KeyboardEvent),
ControllerDevice(ControllerDeviceEvent),
ControllerButton(ControllerButtonEvent),
ControllerAxis(ControllerAxisEvent),
}
impl TryFrom<SDL_Event> for Event {
type Error = SDL_Event;
fn try_from(ev: SDL_Event) -> Result<Self, SDL_Event> {
Ok(unsafe {
match ev.type_ as SDL_EventType {
fermium::SDL_QUIT => Event::Quit(QuitEvent::from(ev.quit)),
fermium::SDL_WINDOWEVENT => {
Event::Window(if let Ok(we) = WindowEvent::try_from(ev.window) {
we
} else {
return Err(ev);
})
}
fermium::SDL_MOUSEMOTION => {
Event::MouseMotion(MouseMotionEvent::from(ev.motion))
}
fermium::SDL_MOUSEBUTTONDOWN | fermium::SDL_MOUSEBUTTONUP => {
Event::MouseButton(MouseButtonEvent::from(ev.button))
}
fermium::SDL_MOUSEWHEEL => {
Event::MouseWheel(MouseWheelEvent::from(ev.wheel))
}
fermium::SDL_KEYDOWN | fermium::SDL_KEYUP => {
Event::Keyboard(KeyboardEvent::from(ev.key))
}
fermium::SDL_CONTROLLERDEVICEADDED
| fermium::SDL_CONTROLLERDEVICEREMOVED
| fermium::SDL_CONTROLLERDEVICEREMAPPED => Event::ControllerDevice(
if let Ok(cde) = ControllerDeviceEvent::try_from(ev.cdevice) {
cde
} else {
return Err(ev);
},
),
fermium::SDL_CONTROLLERBUTTONDOWN | fermium::SDL_CONTROLLERBUTTONUP => {
Event::ControllerButton(ControllerButtonEvent::from(ev.cbutton))
}
fermium::SDL_CONTROLLERAXISMOTION => {
Event::ControllerAxis(ControllerAxisEvent::from(ev.caxis))
}
_ => return Err(ev),
}
})
}
}