From 40e736fbefdbbee5c62d0591ec4aaccab5946671 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Thu, 2 Oct 2014 20:19:50 +0300 Subject: [PATCH] codegen: use #[deriving(FromPrimitive)]. --- src/codegen/keycode.rs | 26 +------------------------- src/sdl2/event.rs | 16 ++++++++++------ src/sdl2/keyboard.rs | 19 ++++++++++++------- 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/src/codegen/keycode.rs b/src/codegen/keycode.rs index 49f2c3ce..1e296178 100644 --- a/src/codegen/keycode.rs +++ b/src/codegen/keycode.rs @@ -311,7 +311,7 @@ pub fn generate(output_dir: &Path) -> IoResult<()> { use std::hash::{mod, Hash}; -#[deriving(PartialEq, Eq, Show)] +#[deriving(PartialEq, Eq, FromPrimitive, Show)] pub enum KeyCode { ".as_bytes())); for &entry in entries.iter() { @@ -340,31 +340,7 @@ impl ToPrimitive for KeyCode {".as_bytes())); try!(out.write(" } - -impl FromPrimitive for KeyCode { - - /// Get a *registered* key code. - /// - /// This will return UnknownKey if an unknown code is passed. - /// - /// For example, `from_int(13)` will return `ReturnKey`. ".as_bytes())); - for primitive_type in types.iter() { - try!(out.write(format!(" - fn from_{}(n: {}) -> Option {{ - match n {{ -", *primitive_type, *primitive_type).container_as_bytes())); - for &entry in entries.iter() { - try!(out.write(format!(" {} => Some({}),\n", entry.code, entry.ident()).container_as_bytes())); - } - try!(out.write(" - _ => { Some(UnknownKey) } - } - }\n".as_bytes())); - } - -try!(out.write(" -}".as_bytes())); try!(out.flush()); Ok(()) } diff --git a/src/sdl2/event.rs b/src/sdl2/event.rs index b7ed675b..7384ed1e 100644 --- a/src/sdl2/event.rs +++ b/src/sdl2/event.rs @@ -15,10 +15,10 @@ use joystick::HatState; use keyboard; use keyboard::Mod; use keyboard::ll::SDL_Keymod; -use keycode::KeyCode; +use keycode::{KeyCode, UnknownKey}; use mouse; use mouse::{Mouse, MouseState}; -use scancode::ScanCode; +use scancode::{ScanCode, UnknownScanCode}; use video; use get_error; use SdlResult; @@ -760,8 +760,10 @@ impl Event { }; KeyDownEvent(event.timestamp as uint, window, - FromPrimitive::from_int(event.keysym.sym as int).unwrap(), - FromPrimitive::from_int(event.keysym.scancode as int).unwrap(), + FromPrimitive::from_int(event.keysym.sym as int) + .unwrap_or(UnknownKey), + FromPrimitive::from_int(event.keysym.scancode as int) + .unwrap_or(UnknownScanCode), keyboard::Mod::from_bits(event.keysym._mod as SDL_Keymod).unwrap()) } KeyUpEventType => { @@ -774,8 +776,10 @@ impl Event { }; KeyUpEvent(event.timestamp as uint, window, - FromPrimitive::from_int(event.keysym.sym as int).unwrap(), - FromPrimitive::from_int(event.keysym.scancode as int).unwrap(), + FromPrimitive::from_int(event.keysym.sym as int) + .unwrap_or(UnknownKey), + FromPrimitive::from_int(event.keysym.scancode as int) + .unwrap_or(UnknownScanCode), keyboard::Mod::from_bits(event.keysym._mod as SDL_Keymod).unwrap()) } TextEditingEventType => { diff --git a/src/sdl2/keyboard.rs b/src/sdl2/keyboard.rs index 471ffcc8..ad548bbf 100644 --- a/src/sdl2/keyboard.rs +++ b/src/sdl2/keyboard.rs @@ -4,9 +4,9 @@ use std::ptr; use std::string; use std::vec; -use keycode::KeyCode; +use keycode::{KeyCode, UnknownKey}; use rect::Rect; -use scancode::ScanCode; +use scancode::{ScanCode, UnknownScanCode}; use video::Window; #[allow(non_camel_case_types)] @@ -86,7 +86,8 @@ pub fn get_keyboard_state() -> HashMap { let mut current = 0; while current < raw.len() { - state.insert(FromPrimitive::from_int(current as int).unwrap(), + state.insert(FromPrimitive::from_int(current as int) + .unwrap_or(UnknownScanCode), raw[current] == 1); current += 1; } @@ -104,13 +105,15 @@ pub fn set_mod_state(flags: Mod) { pub fn get_key_from_scancode(scancode: ScanCode) -> KeyCode { unsafe { - FromPrimitive::from_int(ll::SDL_GetKeyFromScancode(scancode as u32) as int).unwrap() + FromPrimitive::from_int(ll::SDL_GetKeyFromScancode(scancode as u32) as int) + .unwrap_or(UnknownKey) } } pub fn get_scancode_from_key(key: KeyCode) -> ScanCode { unsafe { - FromPrimitive::from_int(ll::SDL_GetScancodeFromKey(key as i32) as int).unwrap() + FromPrimitive::from_int(ll::SDL_GetScancodeFromKey(key as i32) as int) + .unwrap_or(UnknownScanCode) } } @@ -124,7 +127,8 @@ pub fn get_scancode_name(scancode: ScanCode) -> String { pub fn get_scancode_from_name(name: &str) -> ScanCode { unsafe { name.with_c_str(|name| { - FromPrimitive::from_int(ll::SDL_GetScancodeFromName(name) as int).unwrap() + FromPrimitive::from_int(ll::SDL_GetScancodeFromName(name) as int) + .unwrap_or(UnknownScanCode) }) } } @@ -139,7 +143,8 @@ pub fn get_key_name(key: KeyCode) -> String { pub fn get_key_from_name(name: &str) -> KeyCode { unsafe { name.with_c_str(|name| { - FromPrimitive::from_int(ll::SDL_GetKeyFromName(name) as int).unwrap() + FromPrimitive::from_int(ll::SDL_GetKeyFromName(name) as int) + .unwrap_or(UnknownKey) }) } }