cafe/
keyboard.rs

1extern crate sdl2;
2
3pub type Scancode = sdl2::keyboard::Scancode;
4
5const MAX_SCANCODE: usize = Scancode::Num as usize;
6static mut KEY_STATE: Vec<bool> = vec![];
7
8fn check_key(code: Scancode) -> bool {
9    unsafe { KEY_STATE[code as usize] }
10}
11
12pub fn init() {
13    let ptr = unsafe { sdl2::sys::SDL_GetKeyboardState(std::ptr::null_mut()) } as *mut bool;
14    unsafe { KEY_STATE = Vec::from_raw_parts(ptr, MAX_SCANCODE, MAX_SCANCODE) };
15}
16
17pub fn from_name(keyname: &str) -> Option<Scancode> {
18    sdl2::keyboard::Scancode::from_name(keyname)
19}
20
21pub fn get_name(code: Scancode) -> &'static str { code.name() }
22pub fn is_down(code: Scancode) -> bool { check_key(code) }
23pub fn is_up(code: Scancode) -> bool { !check_key(code) }