diff --git a/.travis.yml b/.travis.yml index 0cefea8b..2ad6f5f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,14 @@ env: - secure: MJhmVnQ2IM7+sVmc3vU4ndKOcQgLLeHUPW3qaQBQHKQmvoswCwQK60N17uSgWn1Ln8teqvSRHq4KclIjdMHI+VuQXJHQKHDgjcYbHxwmc3AM1Whnp0XB44ksKUmD109BGWSfZQxzF+6dA+YNOQ+mti+bpydMu8n2FMVjA/SXwQ8= install: - - if [[ $CI_BUILD_FEATURES != *"bundled"* ]]; then bash scripts/travis-install-sdl2.sh; fi + - | + if [[ $CI_BUILD_FEATURES != *"bundled"* ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + sudo apt-get update + sudo apt-get install --assume-yes libgl1-mesa-dev + fi + bash scripts/travis-install-sdl2.sh + fi before_script: - shopt -s expand_aliases diff --git a/changelog.md b/changelog.md index 76200922..6fcd69e6 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,11 @@ when upgrading from a version of rust-sdl2 to another. [PR #882](https://github.com/Rust-SDL2/rust-sdl2/pull/882) Ignore unknown bits in `SDL_Keysym`'s `mod` field (key modifiers) when constructing `Event::KeyDown` and `Event::KeyUp`. Deprecate `sdl2::event::Event::unwrap_keymod`, which had been made public accidentally. +### v0.32.2 + +[PR #898](https://github.com/Rust-SDL2/rust-sdl2/pull/898): +Implements `TryFrom` for `PixelFormat` + ### v0.32.1 [PR #868](https://github.com/Rust-SDL2/rust-sdl2/pull/868): diff --git a/sdl2-sys/build.rs b/sdl2-sys/build.rs index 363750fc..b9cb7c8a 100644 --- a/sdl2-sys/build.rs +++ b/sdl2-sys/build.rs @@ -57,11 +57,11 @@ fn download_to(url: &str, dest: &str) { if cfg!(windows) { run_command("powershell", &[ "-NoProfile", "-NonInteractive", - "-Command", "& { + "-Command", &format!("& {{ $client = New-Object System.Net.WebClient - $client.DownloadFile($args[0], $args[1]) - if (!$?) { Exit 1 } - }", url, dest + $client.DownloadFile(\"{0}\", \"{1}\") + if (!$?) {{ Exit 1 }} + }}", url, dest).as_str() ]); } else { run_command("curl", &[url, "-o", dest]); @@ -301,7 +301,7 @@ fn link_sdl2(target_os: &str) { if cfg!(feature = "bundled") || cfg!(not(feature = "use-pkgconfig")) { if cfg!(feature = "use_mac_framework") && target_os == "darwin" { println!("cargo:rustc-flags=-l framework=SDL2"); - } else { + } else if target_os != "emscripten" { println!("cargo:rustc-flags=-l SDL2"); } } diff --git a/src/sdl2/audio.rs b/src/sdl2/audio.rs index 38eeb06d..8240c3f7 100644 --- a/src/sdl2/audio.rs +++ b/src/sdl2/audio.rs @@ -66,6 +66,7 @@ use crate::get_error; use crate::rwops::RWops; use crate::sys; +use crate::sys::SDL_AudioStatus; impl AudioSubsystem { /// Opens a new audio device given the desired parameters and callback. @@ -199,18 +200,18 @@ impl AudioFormat { #[repr(i32)] #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] pub enum AudioStatus { - Stopped = sys::SDL_AudioStatus::SDL_AUDIO_STOPPED as i32, - Playing = sys::SDL_AudioStatus::SDL_AUDIO_PLAYING as i32, - Paused = sys::SDL_AudioStatus::SDL_AUDIO_PAUSED as i32, + Stopped = SDL_AudioStatus::SDL_AUDIO_STOPPED as i32, + Playing = SDL_AudioStatus::SDL_AUDIO_PLAYING as i32, + Paused = SDL_AudioStatus::SDL_AUDIO_PAUSED as i32, } impl FromPrimitive for AudioStatus { fn from_i64(n: i64) -> Option { use self::AudioStatus::*; - const STOPPED: i64 = sys::SDL_AudioStatus::SDL_AUDIO_STOPPED as i64; - const PLAYING: i64 = sys::SDL_AudioStatus::SDL_AUDIO_PLAYING as i64; - const PAUSED: i64 = sys::SDL_AudioStatus::SDL_AUDIO_PAUSED as i64; + const STOPPED: i64 = SDL_AudioStatus::SDL_AUDIO_STOPPED as i64; + const PLAYING: i64 = SDL_AudioStatus::SDL_AUDIO_PLAYING as i64; + const PAUSED: i64 = SDL_AudioStatus::SDL_AUDIO_PAUSED as i64; Some(match n { STOPPED => Stopped, @@ -301,8 +302,8 @@ impl AudioSpecWAV { freq: desired.freq, format: AudioFormat::from_ll(desired.format).unwrap(), channels: desired.channels, - audio_buf: audio_buf, - audio_len: audio_len + audio_buf, + audio_len }) } } @@ -543,9 +544,9 @@ impl<'a, Channel: AudioFormatNum> AudioQueue { Ok(AudioQueue { subsystem: a.clone(), - device_id: device_id, + device_id, phantom: PhantomData::default(), - spec: spec, + spec, }) } } @@ -636,9 +637,9 @@ impl AudioDevice { Ok(AudioDevice { subsystem: a.clone(), - device_id: device_id, - userdata: userdata, - spec: spec, + device_id, + userdata, + spec, }) } } @@ -747,7 +748,7 @@ impl AudioCVT { src_format.to_ll(), src_channels, src_rate as c_int, dst_format.to_ll(), dst_channels, dst_rate as c_int); if ret == 1 || ret == 0 { - Ok(AudioCVT { raw: raw }) + Ok(AudioCVT { raw }) } else { Err(get_error()) } diff --git a/src/sdl2/cpuinfo.rs b/src/sdl2/cpuinfo.rs index 4cce6fe4..ed5ba7b7 100644 --- a/src/sdl2/cpuinfo.rs +++ b/src/sdl2/cpuinfo.rs @@ -1,4 +1,5 @@ use crate::sys; +use crate::sys::SDL_bool; pub const CACHELINESIZE: u8 = 128; @@ -11,43 +12,43 @@ pub fn cpu_cache_line_size() -> i32 { } pub fn has_rdtsc() -> bool { - unsafe { sys::SDL_HasRDTSC() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasRDTSC() == SDL_bool::SDL_TRUE } } pub fn has_alti_vec() -> bool { - unsafe { sys::SDL_HasAltiVec() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasAltiVec() == SDL_bool::SDL_TRUE } } pub fn has_mmx() -> bool { - unsafe { sys::SDL_HasMMX() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasMMX() == SDL_bool::SDL_TRUE } } pub fn has_3d_now() -> bool { - unsafe { sys::SDL_Has3DNow() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_Has3DNow() == SDL_bool::SDL_TRUE } } pub fn has_sse() -> bool { - unsafe { sys::SDL_HasSSE() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasSSE() == SDL_bool::SDL_TRUE } } pub fn has_sse2() -> bool { - unsafe { sys::SDL_HasSSE2() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasSSE2() == SDL_bool::SDL_TRUE } } pub fn has_sse3() -> bool { - unsafe { sys::SDL_HasSSE3() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasSSE3() == SDL_bool::SDL_TRUE } } pub fn has_sse41() -> bool { - unsafe { sys::SDL_HasSSE41() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasSSE41() == SDL_bool::SDL_TRUE } } pub fn has_sse42() -> bool { - unsafe { sys::SDL_HasSSE42() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasSSE42() == SDL_bool::SDL_TRUE } } pub fn has_avx() -> bool { - unsafe { sys::SDL_HasAVX() == sys::SDL_bool::SDL_TRUE } + unsafe { sys::SDL_HasAVX() == SDL_bool::SDL_TRUE } } pub fn system_ram() -> i32 { diff --git a/src/sdl2/event.rs b/src/sdl2/event.rs index 854469cf..38bf707c 100644 --- a/src/sdl2/event.rs +++ b/src/sdl2/event.rs @@ -28,6 +28,7 @@ use crate::keyboard::Scancode; use crate::get_error; use crate::sys; +use crate::sys::SDL_EventType; struct CustomEventTypeMaps { sdl_id_to_type_id: HashMap, @@ -91,8 +92,8 @@ impl crate::EventSubsystem { events_ptr, max_amount as c_int, sys::SDL_eventaction::SDL_PEEKEVENT, - sys::SDL_EventType::SDL_FIRSTEVENT as u32, - sys::SDL_EventType::SDL_LASTEVENT as u32 + SDL_EventType::SDL_FIRSTEVENT as u32, + SDL_EventType::SDL_LASTEVENT as u32 ) }; @@ -264,56 +265,56 @@ impl crate::EventSubsystem { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[repr(u32)] pub enum EventType { - First = sys::SDL_EventType::SDL_FIRSTEVENT as u32, + First = SDL_EventType::SDL_FIRSTEVENT as u32, - Quit = sys::SDL_EventType::SDL_QUIT as u32, - AppTerminating = sys::SDL_EventType::SDL_APP_TERMINATING as u32, - AppLowMemory = sys::SDL_EventType::SDL_APP_LOWMEMORY as u32, - AppWillEnterBackground = sys::SDL_EventType::SDL_APP_WILLENTERBACKGROUND as u32, - AppDidEnterBackground = sys::SDL_EventType::SDL_APP_DIDENTERBACKGROUND as u32, - AppWillEnterForeground = sys::SDL_EventType::SDL_APP_WILLENTERFOREGROUND as u32, - AppDidEnterForeground = sys::SDL_EventType::SDL_APP_DIDENTERFOREGROUND as u32, + Quit = SDL_EventType::SDL_QUIT as u32, + AppTerminating = SDL_EventType::SDL_APP_TERMINATING as u32, + AppLowMemory = SDL_EventType::SDL_APP_LOWMEMORY as u32, + AppWillEnterBackground = SDL_EventType::SDL_APP_WILLENTERBACKGROUND as u32, + AppDidEnterBackground = SDL_EventType::SDL_APP_DIDENTERBACKGROUND as u32, + AppWillEnterForeground = SDL_EventType::SDL_APP_WILLENTERFOREGROUND as u32, + AppDidEnterForeground = SDL_EventType::SDL_APP_DIDENTERFOREGROUND as u32, - Window = sys::SDL_EventType::SDL_WINDOWEVENT as u32, + Window = SDL_EventType::SDL_WINDOWEVENT as u32, // TODO: SysWM = sys::SDL_SYSWMEVENT as u32, - KeyDown = sys::SDL_EventType::SDL_KEYDOWN as u32, - KeyUp = sys::SDL_EventType::SDL_KEYUP as u32, - TextEditing = sys::SDL_EventType::SDL_TEXTEDITING as u32, - TextInput = sys::SDL_EventType::SDL_TEXTINPUT as u32, + KeyDown = SDL_EventType::SDL_KEYDOWN as u32, + KeyUp = SDL_EventType::SDL_KEYUP as u32, + TextEditing = SDL_EventType::SDL_TEXTEDITING as u32, + TextInput = SDL_EventType::SDL_TEXTINPUT as u32, - MouseMotion = sys::SDL_EventType::SDL_MOUSEMOTION as u32, - MouseButtonDown = sys::SDL_EventType::SDL_MOUSEBUTTONDOWN as u32, - MouseButtonUp = sys::SDL_EventType::SDL_MOUSEBUTTONUP as u32, - MouseWheel = sys::SDL_EventType::SDL_MOUSEWHEEL as u32, + MouseMotion = SDL_EventType::SDL_MOUSEMOTION as u32, + MouseButtonDown = SDL_EventType::SDL_MOUSEBUTTONDOWN as u32, + MouseButtonUp = SDL_EventType::SDL_MOUSEBUTTONUP as u32, + MouseWheel = SDL_EventType::SDL_MOUSEWHEEL as u32, - JoyAxisMotion = sys::SDL_EventType::SDL_JOYAXISMOTION as u32, - JoyBallMotion = sys::SDL_EventType::SDL_JOYBALLMOTION as u32, - JoyHatMotion = sys::SDL_EventType::SDL_JOYHATMOTION as u32, - JoyButtonDown = sys::SDL_EventType::SDL_JOYBUTTONDOWN as u32, - JoyButtonUp = sys::SDL_EventType::SDL_JOYBUTTONUP as u32, - JoyDeviceAdded = sys::SDL_EventType::SDL_JOYDEVICEADDED as u32, - JoyDeviceRemoved = sys::SDL_EventType::SDL_JOYDEVICEREMOVED as u32, + JoyAxisMotion = SDL_EventType::SDL_JOYAXISMOTION as u32, + JoyBallMotion = SDL_EventType::SDL_JOYBALLMOTION as u32, + JoyHatMotion = SDL_EventType::SDL_JOYHATMOTION as u32, + JoyButtonDown = SDL_EventType::SDL_JOYBUTTONDOWN as u32, + JoyButtonUp = SDL_EventType::SDL_JOYBUTTONUP as u32, + JoyDeviceAdded = SDL_EventType::SDL_JOYDEVICEADDED as u32, + JoyDeviceRemoved = SDL_EventType::SDL_JOYDEVICEREMOVED as u32, - ControllerAxisMotion = sys::SDL_EventType::SDL_CONTROLLERAXISMOTION as u32, - ControllerButtonDown = sys::SDL_EventType::SDL_CONTROLLERBUTTONDOWN as u32, - ControllerButtonUp = sys::SDL_EventType::SDL_CONTROLLERBUTTONUP as u32, - ControllerDeviceAdded = sys::SDL_EventType::SDL_CONTROLLERDEVICEADDED as u32, - ControllerDeviceRemoved = sys::SDL_EventType::SDL_CONTROLLERDEVICEREMOVED as u32, - ControllerDeviceRemapped = sys::SDL_EventType::SDL_CONTROLLERDEVICEREMAPPED as u32, + ControllerAxisMotion = SDL_EventType::SDL_CONTROLLERAXISMOTION as u32, + ControllerButtonDown = SDL_EventType::SDL_CONTROLLERBUTTONDOWN as u32, + ControllerButtonUp = SDL_EventType::SDL_CONTROLLERBUTTONUP as u32, + ControllerDeviceAdded = SDL_EventType::SDL_CONTROLLERDEVICEADDED as u32, + ControllerDeviceRemoved = SDL_EventType::SDL_CONTROLLERDEVICEREMOVED as u32, + ControllerDeviceRemapped = SDL_EventType::SDL_CONTROLLERDEVICEREMAPPED as u32, - FingerDown = sys::SDL_EventType::SDL_FINGERDOWN as u32, - FingerUp = sys::SDL_EventType::SDL_FINGERUP as u32, - FingerMotion = sys::SDL_EventType::SDL_FINGERMOTION as u32, - DollarGesture = sys::SDL_EventType::SDL_DOLLARGESTURE as u32, - DollarRecord = sys::SDL_EventType::SDL_DOLLARRECORD as u32, - MultiGesture = sys::SDL_EventType::SDL_MULTIGESTURE as u32, + FingerDown = SDL_EventType::SDL_FINGERDOWN as u32, + FingerUp = SDL_EventType::SDL_FINGERUP as u32, + FingerMotion = SDL_EventType::SDL_FINGERMOTION as u32, + DollarGesture = SDL_EventType::SDL_DOLLARGESTURE as u32, + DollarRecord = SDL_EventType::SDL_DOLLARRECORD as u32, + MultiGesture = SDL_EventType::SDL_MULTIGESTURE as u32, - ClipboardUpdate = sys::SDL_EventType::SDL_CLIPBOARDUPDATE as u32, - DropFile = sys::SDL_EventType::SDL_DROPFILE as u32, + ClipboardUpdate = SDL_EventType::SDL_CLIPBOARDUPDATE as u32, + DropFile = SDL_EventType::SDL_DROPFILE as u32, - User = sys::SDL_EventType::SDL_USEREVENT as u32, - Last = sys::SDL_EventType::SDL_LASTEVENT as u32, + User = SDL_EventType::SDL_USEREVENT as u32, + Last = SDL_EventType::SDL_LASTEVENT as u32, } impl FromPrimitive for EventType { @@ -735,7 +736,7 @@ where S: Into>, .unwrap_or(sys::SDLK_UNKNOWN as i32); let keymod = keymod.bits() as u16; sys::SDL_Keysym { - scancode: scancode, + scancode, sym: keycode, mod_: keymod, unused: 0, @@ -752,11 +753,11 @@ impl Event { Event::User { window_id, type_, code, data1, data2, timestamp} => { let event = sys::SDL_UserEvent { type_: type_ as uint32_t, - timestamp: timestamp, + timestamp, windowID: window_id, code: code as i32, - data1: data1, - data2: data2 + data1, + data2 }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_UserEvent, 1); @@ -766,8 +767,8 @@ impl Event { Event::Quit{timestamp} => { let event = sys::SDL_QuitEvent { - type_: sys::SDL_EventType::SDL_QUIT as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_QUIT as u32, + timestamp, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_QuitEvent, 1); @@ -782,15 +783,15 @@ impl Event { } => { let (win_event_id, data1, data2) = win_event.to_ll(); let event = sys::SDL_WindowEvent { - type_: sys::SDL_EventType::SDL_WINDOWEVENT as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_WINDOWEVENT as u32, + timestamp, windowID: window_id, event: win_event_id, padding1: 0, padding2: 0, padding3: 0, - data1: data1, - data2: data2, + data1, + data2, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_WindowEvent, 1); @@ -808,14 +809,14 @@ impl Event { } => { let keysym = mk_keysym(scancode, keycode, keymod); let event = sys::SDL_KeyboardEvent{ - type_: sys::SDL_EventType::SDL_KEYDOWN as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_KEYDOWN as u32, + timestamp, windowID: window_id, state: sys::SDL_PRESSED as u8, repeat: repeat as u8, padding2: 0, padding3: 0, - keysym: keysym, + keysym, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_KeyboardEvent, 1); @@ -832,14 +833,14 @@ impl Event { } => { let keysym = mk_keysym(scancode, keycode, keymod); let event = sys::SDL_KeyboardEvent{ - type_: sys::SDL_EventType::SDL_KEYUP as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_KEYUP as u32, + timestamp, windowID: window_id, state: sys::SDL_RELEASED as u8, repeat: repeat as u8, padding2: 0, padding3: 0, - keysym: keysym, + keysym, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_KeyboardEvent, 1); @@ -858,15 +859,15 @@ impl Event { } => { let state = mousestate.to_sdl_state(); let event = sys::SDL_MouseMotionEvent { - type_: sys::SDL_EventType::SDL_MOUSEMOTION as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_MOUSEMOTION as u32, + timestamp, windowID: window_id, - which: which, - state: state, - x: x, - y: y, - xrel: xrel, - yrel: yrel, + which, + state, + x, + y, + xrel, + yrel, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_MouseMotionEvent, 1); @@ -884,16 +885,16 @@ impl Event { y } => { let event = sys::SDL_MouseButtonEvent { - type_: sys::SDL_EventType::SDL_MOUSEBUTTONDOWN as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_MOUSEBUTTONDOWN as u32, + timestamp, windowID: window_id, - which: which, + which, button: mouse_btn as u8, state: sys::SDL_PRESSED as u8, - clicks: clicks, + clicks, padding1: 0, - x: x, - y: y + x, + y }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_MouseButtonEvent, 1); @@ -910,16 +911,16 @@ impl Event { y } => { let event = sys::SDL_MouseButtonEvent { - type_: sys::SDL_EventType::SDL_MOUSEBUTTONUP as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_MOUSEBUTTONUP as u32, + timestamp, windowID: window_id, - which: which, + which, button: mouse_btn as u8, state: sys::SDL_RELEASED as u8, - clicks: clicks, + clicks, padding1: 0, - x: x, - y: y + x, + y }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_MouseButtonEvent, 1); @@ -936,12 +937,12 @@ impl Event { direction, } => { let event = sys::SDL_MouseWheelEvent { - type_: sys::SDL_EventType::SDL_MOUSEWHEEL as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_MOUSEWHEEL as u32, + timestamp, windowID: window_id, - which: which, - x: x, - y: y, + which, + x, + y, direction : direction.to_ll(), }; unsafe { @@ -956,11 +957,11 @@ impl Event { value } => { let event = sys::SDL_JoyAxisEvent { - type_: sys::SDL_EventType::SDL_JOYAXISMOTION as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYAXISMOTION as u32, + timestamp, + which, axis: axis_idx, - value: value, + value, padding1: 0, padding2: 0, padding3: 0, @@ -980,12 +981,12 @@ impl Event { yrel } => { let event = sys::SDL_JoyBallEvent { - type_: sys::SDL_EventType::SDL_JOYBALLMOTION as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYBALLMOTION as u32, + timestamp, + which, ball: ball_idx, - xrel: xrel, - yrel: yrel, + xrel, + yrel, padding1: 0, padding2: 0, padding3: 0 @@ -1004,9 +1005,9 @@ impl Event { } => { let hatvalue = state.to_raw(); let event = sys::SDL_JoyHatEvent { - type_: sys::SDL_EventType::SDL_JOYHATMOTION as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYHATMOTION as u32, + timestamp, + which, hat: hat_idx, value: hatvalue, padding1: 0, @@ -1024,9 +1025,9 @@ impl Event { button_idx } => { let event = sys::SDL_JoyButtonEvent { - type_: sys::SDL_EventType::SDL_JOYBUTTONDOWN as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYBUTTONDOWN as u32, + timestamp, + which, button: button_idx, state: sys::SDL_PRESSED as u8, padding1: 0, @@ -1045,9 +1046,9 @@ impl Event { button_idx, } => { let event = sys::SDL_JoyButtonEvent { - type_: sys::SDL_EventType::SDL_JOYBUTTONUP as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYBUTTONUP as u32, + timestamp, + which, button: button_idx, state: sys::SDL_RELEASED as u8, padding1: 0, @@ -1065,8 +1066,8 @@ impl Event { which, } => { let event = sys::SDL_JoyDeviceEvent { - type_: sys::SDL_EventType::SDL_JOYDEVICEADDED as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_JOYDEVICEADDED as u32, + timestamp, which: which as i32, }; unsafe { @@ -1080,9 +1081,9 @@ impl Event { which, } => { let event = sys::SDL_JoyDeviceEvent { - type_: sys::SDL_EventType::SDL_JOYDEVICEREMOVED as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_JOYDEVICEREMOVED as u32, + timestamp, + which, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_JoyDeviceEvent, 1); @@ -1098,11 +1099,11 @@ impl Event { } => { let axisval = axis.to_ll(); let event = sys::SDL_ControllerAxisEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERAXISMOTION as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_CONTROLLERAXISMOTION as u32, + timestamp, + which, axis: axisval as u8, - value: value, + value, padding1: 0, padding2: 0, padding3: 0, @@ -1120,9 +1121,9 @@ impl Event { } => { let buttonval = button.to_ll(); let event = sys::SDL_ControllerButtonEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERBUTTONDOWN as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_CONTROLLERBUTTONDOWN as u32, + timestamp, + which, // This conversion turns an i32 into a u8; signed-to-unsigned conversions // are a bit of a code smell, but that appears to be how SDL defines it. button: buttonval as u8, @@ -1143,9 +1144,9 @@ impl Event { } => { let buttonval = button.to_ll(); let event = sys::SDL_ControllerButtonEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERBUTTONUP as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_CONTROLLERBUTTONUP as u32, + timestamp, + which, button: buttonval as u8, state: sys::SDL_RELEASED as u8, padding1: 0, @@ -1162,8 +1163,8 @@ impl Event { which, } => { let event = sys::SDL_ControllerDeviceEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERDEVICEADDED as u32, - timestamp: timestamp, + type_: SDL_EventType::SDL_CONTROLLERDEVICEADDED as u32, + timestamp, which: which as i32, }; unsafe { @@ -1178,9 +1179,9 @@ impl Event { which, } => { let event = sys::SDL_ControllerDeviceEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERDEVICEREMOVED as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_CONTROLLERDEVICEREMOVED as u32, + timestamp, + which, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_ControllerDeviceEvent, 1); @@ -1194,9 +1195,9 @@ impl Event { which, } => { let event = sys::SDL_ControllerDeviceEvent { - type_: sys::SDL_EventType::SDL_CONTROLLERDEVICEREMAPPED as u32, - timestamp: timestamp, - which: which, + type_: SDL_EventType::SDL_CONTROLLERDEVICEREMAPPED as u32, + timestamp, + which, }; unsafe { ptr::copy(&event, &mut ret as *mut sys::SDL_Event as *mut sys::SDL_ControllerDeviceEvent, 1); @@ -1306,7 +1307,7 @@ impl Event { Event::TextEditing { timestamp: event.timestamp, window_id: event.windowID, - text: text, + text, start: event.start, length: event.length } @@ -1323,7 +1324,7 @@ impl Event { Event::TextInput { timestamp: event.timestamp, window_id: event.windowID, - text: text + text } } @@ -1446,7 +1447,7 @@ impl Event { Event::ControllerAxisMotion { timestamp: event.timestamp, which: event.which, - axis: axis, + axis, value: event.value } } @@ -1457,7 +1458,7 @@ impl Event { Event::ControllerButtonDown { timestamp: event.timestamp, which: event.which, - button: button + button } } EventType::ControllerButtonUp => { @@ -1467,7 +1468,7 @@ impl Event { Event::ControllerButtonUp { timestamp: event.timestamp, which: event.which, - button: button + button } } EventType::ControllerDeviceAdded => { @@ -1766,7 +1767,7 @@ impl crate::EventPump { pub fn wait_timeout_iter(&mut self, timeout: u32) -> EventWaitTimeoutIterator { EventWaitTimeoutIterator { _marker: PhantomData, - timeout: timeout + timeout } } diff --git a/src/sdl2/gfx/framerate.rs b/src/sdl2/gfx/framerate.rs index 383a5c8a..81d05a52 100644 --- a/src/sdl2/gfx/framerate.rs +++ b/src/sdl2/gfx/framerate.rs @@ -4,27 +4,27 @@ use libc; use libc::{c_void, uint32_t, size_t}; use std::mem; use ::get_error; -use sys; +use sys::gfx; /// Structure holding the state and timing information of the framerate controller. pub struct FPSManager { - raw: *mut sys::gfx::framerate::FPSmanager, + raw: *mut gfx::framerate::FPSmanager, } impl FPSManager { /// Create the framerate manager. pub fn new() -> FPSManager { unsafe { - let size = mem::size_of::() as size_t; - let raw = libc::malloc(size) as *mut sys::gfx::framerate::FPSmanager; - sys::gfx::framerate::SDL_initFramerate(raw); + let size = mem::size_of::() as size_t; + let raw = libc::malloc(size) as *mut gfx::framerate::FPSmanager; + gfx::framerate::SDL_initFramerate(raw); FPSManager { raw: raw } } } /// Set the framerate in Hz. pub fn set_framerate(&mut self, rate: u32) -> Result<(), String> { - let ret = unsafe { sys::gfx::framerate::SDL_setFramerate(self.raw, rate as uint32_t) }; + let ret = unsafe { gfx::framerate::SDL_setFramerate(self.raw, rate as uint32_t) }; match ret { 0 => Ok(()), _ => Err(get_error()) @@ -34,18 +34,18 @@ impl FPSManager { /// Return the current target framerate in Hz. pub fn get_framerate(&self) -> i32 { // will not get an error - unsafe { sys::gfx::framerate::SDL_getFramerate(self.raw) as i32 } + unsafe { gfx::framerate::SDL_getFramerate(self.raw) as i32 } } /// Return the current framecount. pub fn get_frame_count(&self) -> i32 { // will not get an error - unsafe { sys::gfx::framerate::SDL_getFramecount(self.raw) as i32 } + unsafe { gfx::framerate::SDL_getFramecount(self.raw) as i32 } } /// Delay execution to maintain a constant framerate and calculate fps. pub fn delay(&mut self) -> u32 { - unsafe { sys::gfx::framerate::SDL_framerateDelay(self.raw) as u32 } + unsafe { gfx::framerate::SDL_framerateDelay(self.raw) as u32 } } } diff --git a/src/sdl2/image/mod.rs b/src/sdl2/image/mod.rs index 444800bc..cac8c1ae 100644 --- a/src/sdl2/image/mod.rs +++ b/src/sdl2/image/mod.rs @@ -29,15 +29,16 @@ use rwops::RWops; use version::Version; use get_error; use sys; +use sys::image; /// InitFlags are passed to init() to control which subsystem /// functionality to load. bitflags! { pub struct InitFlag : u32 { - const JPG = sys::image::IMG_InitFlags_IMG_INIT_JPG as u32; - const PNG = sys::image::IMG_InitFlags_IMG_INIT_PNG as u32; - const TIF = sys::image::IMG_InitFlags_IMG_INIT_TIF as u32; - const WEBP = sys::image::IMG_InitFlags_IMG_INIT_WEBP as u32; + const JPG = image::IMG_InitFlags_IMG_INIT_JPG as u32; + const PNG = image::IMG_InitFlags_IMG_INIT_PNG as u32; + const TIF = image::IMG_InitFlags_IMG_INIT_TIF as u32; + const WEBP = image::IMG_InitFlags_IMG_INIT_WEBP as u32; } } @@ -81,7 +82,7 @@ impl<'a> LoadSurface for Surface<'a> { //! Loads an SDL Surface from a file unsafe { let c_filename = CString::new(filename.as_ref().to_str().unwrap()).unwrap(); - let raw = sys::image::IMG_Load(c_filename.as_ptr() as *const _); + let raw = image::IMG_Load(c_filename.as_ptr() as *const _); if (raw as *mut ()).is_null() { Err(get_error()) } else { @@ -93,7 +94,7 @@ impl<'a> LoadSurface for Surface<'a> { fn from_xpm_array(xpm: *const *const i8) -> Result, String> { //! Loads an SDL Surface from XPM data unsafe { - let raw = sys::image::IMG_ReadXPMFromArray(xpm as *mut *mut c_char); + let raw = image::IMG_ReadXPMFromArray(xpm as *mut *mut c_char); if (raw as *mut ()).is_null() { Err(get_error()) } else { @@ -108,7 +109,7 @@ impl<'a> SaveSurface for Surface<'a> { //! Saves an SDL Surface to a file unsafe { let c_filename = CString::new(filename.as_ref().to_str().unwrap()).unwrap(); - let status = sys::image::IMG_SavePNG(self.raw(), c_filename.as_ptr() as *const _); + let status = image::IMG_SavePNG(self.raw(), c_filename.as_ptr() as *const _); if status != 0 { Err(get_error()) } else { @@ -120,7 +121,7 @@ impl<'a> SaveSurface for Surface<'a> { fn save_rw(&self, dst: &mut RWops) -> Result<(), String> { //! Saves an SDL Surface to an RWops unsafe { - let status = sys::image::IMG_SavePNG_RW(self.raw(), dst.raw(), 0); + let status = image::IMG_SavePNG_RW(self.raw(), dst.raw(), 0); if status != 0 { Err(get_error()) @@ -141,7 +142,7 @@ impl LoadTexture for TextureCreator { //! Loads an SDL Texture from a file unsafe { let c_filename = CString::new(filename.as_ref().to_str().unwrap()).unwrap(); - let raw = sys::image::IMG_LoadTexture(self.raw(), c_filename.as_ptr() as *const _); + let raw = image::IMG_LoadTexture(self.raw(), c_filename.as_ptr() as *const _); if (raw as *mut ()).is_null() { Err(get_error()) } else { @@ -158,7 +159,7 @@ pub struct Sdl2ImageContext; impl Drop for Sdl2ImageContext { fn drop(&mut self) { unsafe { - sys::image::IMG_Quit(); + image::IMG_Quit(); } } } @@ -167,7 +168,7 @@ impl Drop for Sdl2ImageContext { /// If not every flag is set it returns an error pub fn init(flags: InitFlag) -> Result { let return_flags = unsafe { - let used = sys::image::IMG_Init(flags.bits() as c_int); + let used = image::IMG_Init(flags.bits() as c_int); InitFlag::from_bits_truncate(used as u32) }; if !flags.intersects(return_flags) { @@ -186,7 +187,7 @@ pub fn init(flags: InitFlag) -> Result { /// Returns the version of the dynamically linked `SDL_image` library pub fn get_linked_version() -> Version { - unsafe { Version::from_ll(*sys::image::IMG_Linked_Version()) } + unsafe { Version::from_ll(*image::IMG_Linked_Version()) } } #[inline] @@ -238,118 +239,118 @@ pub trait ImageRWops { impl<'a> ImageRWops for RWops<'a> { fn load(&self) -> Result { - let raw = unsafe { sys::image::IMG_Load_RW(self.raw(), 0) }; + let raw = unsafe { image::IMG_Load_RW(self.raw(), 0) }; to_surface_result(raw) } fn load_typed(&self, _type: &str) -> Result { let raw = unsafe { let c_type = CString::new(_type.as_bytes()).unwrap(); - sys::image::IMG_LoadTyped_RW(self.raw(), 0, c_type.as_ptr() as *const _) + image::IMG_LoadTyped_RW(self.raw(), 0, c_type.as_ptr() as *const _) }; to_surface_result(raw) } fn load_cur(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadCUR_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadCUR_RW(self.raw()) }; to_surface_result(raw) } fn load_ico(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadICO_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadICO_RW(self.raw()) }; to_surface_result(raw) } fn load_bmp(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadBMP_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadBMP_RW(self.raw()) }; to_surface_result(raw) } fn load_pnm(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadPNM_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadPNM_RW(self.raw()) }; to_surface_result(raw) } fn load_xpm(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadXPM_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadXPM_RW(self.raw()) }; to_surface_result(raw) } fn load_xcf(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadXCF_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadXCF_RW(self.raw()) }; to_surface_result(raw) } fn load_pcx(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadPCX_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadPCX_RW(self.raw()) }; to_surface_result(raw) } fn load_gif(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadGIF_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadGIF_RW(self.raw()) }; to_surface_result(raw) } fn load_jpg(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadJPG_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadJPG_RW(self.raw()) }; to_surface_result(raw) } fn load_tif(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadTIF_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadTIF_RW(self.raw()) }; to_surface_result(raw) } fn load_png(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadPNG_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadPNG_RW(self.raw()) }; to_surface_result(raw) } fn load_tga(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadTGA_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadTGA_RW(self.raw()) }; to_surface_result(raw) } fn load_lbm(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadLBM_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadLBM_RW(self.raw()) }; to_surface_result(raw) } fn load_xv(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadXV_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadXV_RW(self.raw()) }; to_surface_result(raw) } fn load_webp(&self) -> Result { - let raw = unsafe { sys::image::IMG_LoadWEBP_RW(self.raw()) }; + let raw = unsafe { image::IMG_LoadWEBP_RW(self.raw()) }; to_surface_result(raw) } fn is_cur(&self) -> bool { - unsafe { sys::image::IMG_isCUR(self.raw()) == 1 } + unsafe { image::IMG_isCUR(self.raw()) == 1 } } fn is_ico(&self) -> bool { - unsafe { sys::image::IMG_isICO(self.raw()) == 1 } + unsafe { image::IMG_isICO(self.raw()) == 1 } } fn is_bmp(&self) -> bool { - unsafe { sys::image::IMG_isBMP(self.raw()) == 1 } + unsafe { image::IMG_isBMP(self.raw()) == 1 } } fn is_pnm(&self) -> bool { - unsafe { sys::image::IMG_isPNM(self.raw()) == 1 } + unsafe { image::IMG_isPNM(self.raw()) == 1 } } fn is_xpm(&self) -> bool { - unsafe { sys::image::IMG_isXPM(self.raw()) == 1 } + unsafe { image::IMG_isXPM(self.raw()) == 1 } } fn is_xcf(&self) -> bool { - unsafe { sys::image::IMG_isXCF(self.raw()) == 1 } + unsafe { image::IMG_isXCF(self.raw()) == 1 } } fn is_pcx(&self) -> bool { - unsafe { sys::image::IMG_isPCX(self.raw()) == 1 } + unsafe { image::IMG_isPCX(self.raw()) == 1 } } fn is_gif(&self) -> bool { - unsafe { sys::image::IMG_isGIF(self.raw()) == 1 } + unsafe { image::IMG_isGIF(self.raw()) == 1 } } fn is_jpg(&self) -> bool { - unsafe { sys::image::IMG_isJPG(self.raw()) == 1 } + unsafe { image::IMG_isJPG(self.raw()) == 1 } } fn is_tif(&self) -> bool { - unsafe { sys::image::IMG_isTIF(self.raw()) == 1 } + unsafe { image::IMG_isTIF(self.raw()) == 1 } } fn is_png(&self) -> bool { - unsafe { sys::image::IMG_isPNG(self.raw()) == 1 } + unsafe { image::IMG_isPNG(self.raw()) == 1 } } fn is_lbm(&self) -> bool { - unsafe { sys::image::IMG_isLBM(self.raw()) == 1 } + unsafe { image::IMG_isLBM(self.raw()) == 1 } } fn is_xv(&self) -> bool { - unsafe { sys::image::IMG_isXV(self.raw()) == 1 } + unsafe { image::IMG_isXV(self.raw()) == 1 } } fn is_webp(&self) -> bool { - unsafe { sys::image::IMG_isWEBP(self.raw()) == 1 } + unsafe { image::IMG_isWEBP(self.raw()) == 1 } } } diff --git a/src/sdl2/joystick.rs b/src/sdl2/joystick.rs index bb9ed041..6a233bfd 100644 --- a/src/sdl2/joystick.rs +++ b/src/sdl2/joystick.rs @@ -1,4 +1,5 @@ use crate::sys; +use crate::sys::SDL_JoystickPowerLevel; use crate::JoystickSubsystem; use crate::get_error; @@ -61,7 +62,7 @@ impl JoystickSubsystem { let raw = unsafe { sys::SDL_JoystickGetDeviceGUID(joystick_index) }; - let guid = Guid { raw: raw }; + let guid = Guid { raw }; if guid.is_zero() { Err(SdlError(get_error())) @@ -93,35 +94,35 @@ impl JoystickSubsystem { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[repr(i32)] pub enum PowerLevel { - Unknown = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN as i32, - Empty = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY as i32, - Low = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW as i32, - Medium = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM as i32, - Full = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL as i32, - Wired = sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED as i32, + Unknown = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN as i32, + Empty = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY as i32, + Low = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW as i32, + Medium = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM as i32, + Full = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL as i32, + Wired = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED as i32, } impl PowerLevel { - pub fn from_ll(raw: sys::SDL_JoystickPowerLevel) -> PowerLevel { + pub fn from_ll(raw: SDL_JoystickPowerLevel) -> PowerLevel { match raw { - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN => PowerLevel::Unknown, - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY => PowerLevel::Empty, - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW => PowerLevel::Low, - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM => PowerLevel::Medium, - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL => PowerLevel::Full, - sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED => PowerLevel::Wired, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN => PowerLevel::Unknown, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY => PowerLevel::Empty, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW => PowerLevel::Low, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM => PowerLevel::Medium, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL => PowerLevel::Full, + SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED => PowerLevel::Wired, _ => panic!("Unexpected power level: {:?}", raw), } } - pub fn to_ll(&self) -> sys::SDL_JoystickPowerLevel { + pub fn to_ll(&self) -> SDL_JoystickPowerLevel { match *self { - PowerLevel::Unknown => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN, - PowerLevel::Empty => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY, - PowerLevel::Low => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW, - PowerLevel::Medium => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM, - PowerLevel::Full => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL, - PowerLevel::Wired => sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED, + PowerLevel::Unknown => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN, + PowerLevel::Empty => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_EMPTY, + PowerLevel::Low => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_LOW, + PowerLevel::Medium => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_MEDIUM, + PowerLevel::Full => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_FULL, + PowerLevel::Wired => SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_WIRED, } } @@ -166,7 +167,7 @@ impl Joystick { pub fn guid(&self) -> Guid { let raw = unsafe { sys::SDL_JoystickGetGUID(self.raw) }; - let guid = Guid { raw: raw }; + let guid = Guid { raw }; if guid.is_zero() { // Should only fail if the joystick is NULL. @@ -185,7 +186,7 @@ impl Joystick { let state = PowerLevel::from_ll(result); - if result != sys::SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN { + if result != SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN { Ok(state) } else { let err = get_error(); @@ -407,7 +408,7 @@ impl Guid { let raw = unsafe { sys::SDL_JoystickGetGUIDFromString(guid.as_ptr() as *const c_char) }; - Ok(Guid { raw: raw }) + Ok(Guid { raw }) } /// Return `true` if GUID is full 0s @@ -488,7 +489,11 @@ impl HatState { 6 => HatState::RightDown, 9 => HatState::LeftUp, 12 => HatState::LeftDown, - _ => panic!("Unexpected hat position: {}", raw), + + // The Xinput driver on Windows can report hat states on certain hardware that don't + // make any sense from a gameplay perspective, and so aren't worth putting in the + // HatState enumeration. + _ => HatState::Centered, } } diff --git a/src/sdl2/keyboard/mod.rs b/src/sdl2/keyboard/mod.rs index c0e2cda9..1dd8bf84 100644 --- a/src/sdl2/keyboard/mod.rs +++ b/src/sdl2/keyboard/mod.rs @@ -1,6 +1,8 @@ use crate::EventPump; use crate::rect::Rect; use crate::video::Window; + +use std::fmt; use std::mem::transmute; use crate::sys; @@ -28,6 +30,12 @@ bitflags! { } } +impl fmt::Display for Mod { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:04x}", *self) + } +} + pub struct KeyboardState<'a> { keyboard_state: &'a [u8] } @@ -42,7 +50,7 @@ impl<'a> KeyboardState<'a> { }; KeyboardState { - keyboard_state: keyboard_state + keyboard_state } } diff --git a/src/sdl2/keyboard/scancode.rs b/src/sdl2/keyboard/scancode.rs index bb4d69df..da7b6d6d 100644 --- a/src/sdl2/keyboard/scancode.rs +++ b/src/sdl2/keyboard/scancode.rs @@ -5,251 +5,252 @@ use libc::c_char; use std::mem::transmute; use crate::sys; +use crate::sys::SDL_Scancode; #[repr(i32)] #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] pub enum Scancode { - A = sys::SDL_Scancode::SDL_SCANCODE_A as i32, - B = sys::SDL_Scancode::SDL_SCANCODE_B as i32, - C = sys::SDL_Scancode::SDL_SCANCODE_C as i32, - D = sys::SDL_Scancode::SDL_SCANCODE_D as i32, - E = sys::SDL_Scancode::SDL_SCANCODE_E as i32, - F = sys::SDL_Scancode::SDL_SCANCODE_F as i32, - G = sys::SDL_Scancode::SDL_SCANCODE_G as i32, - H = sys::SDL_Scancode::SDL_SCANCODE_H as i32, - I = sys::SDL_Scancode::SDL_SCANCODE_I as i32, - J = sys::SDL_Scancode::SDL_SCANCODE_J as i32, - K = sys::SDL_Scancode::SDL_SCANCODE_K as i32, - L = sys::SDL_Scancode::SDL_SCANCODE_L as i32, - M = sys::SDL_Scancode::SDL_SCANCODE_M as i32, - N = sys::SDL_Scancode::SDL_SCANCODE_N as i32, - O = sys::SDL_Scancode::SDL_SCANCODE_O as i32, - P = sys::SDL_Scancode::SDL_SCANCODE_P as i32, - Q = sys::SDL_Scancode::SDL_SCANCODE_Q as i32, - R = sys::SDL_Scancode::SDL_SCANCODE_R as i32, - S = sys::SDL_Scancode::SDL_SCANCODE_S as i32, - T = sys::SDL_Scancode::SDL_SCANCODE_T as i32, - U = sys::SDL_Scancode::SDL_SCANCODE_U as i32, - V = sys::SDL_Scancode::SDL_SCANCODE_V as i32, - W = sys::SDL_Scancode::SDL_SCANCODE_W as i32, - X = sys::SDL_Scancode::SDL_SCANCODE_X as i32, - Y = sys::SDL_Scancode::SDL_SCANCODE_Y as i32, - Z = sys::SDL_Scancode::SDL_SCANCODE_Z as i32, - Num1 = sys::SDL_Scancode::SDL_SCANCODE_1 as i32, - Num2 = sys::SDL_Scancode::SDL_SCANCODE_2 as i32, - Num3 = sys::SDL_Scancode::SDL_SCANCODE_3 as i32, - Num4 = sys::SDL_Scancode::SDL_SCANCODE_4 as i32, - Num5 = sys::SDL_Scancode::SDL_SCANCODE_5 as i32, - Num6 = sys::SDL_Scancode::SDL_SCANCODE_6 as i32, - Num7 = sys::SDL_Scancode::SDL_SCANCODE_7 as i32, - Num8 = sys::SDL_Scancode::SDL_SCANCODE_8 as i32, - Num9 = sys::SDL_Scancode::SDL_SCANCODE_9 as i32, - Num0 = sys::SDL_Scancode::SDL_SCANCODE_0 as i32, - Return = sys::SDL_Scancode::SDL_SCANCODE_RETURN as i32, - Escape = sys::SDL_Scancode::SDL_SCANCODE_ESCAPE as i32, - Backspace = sys::SDL_Scancode::SDL_SCANCODE_BACKSPACE as i32, - Tab = sys::SDL_Scancode::SDL_SCANCODE_TAB as i32, - Space = sys::SDL_Scancode::SDL_SCANCODE_SPACE as i32, - Minus = sys::SDL_Scancode::SDL_SCANCODE_MINUS as i32, - Equals = sys::SDL_Scancode::SDL_SCANCODE_EQUALS as i32, - LeftBracket = sys::SDL_Scancode::SDL_SCANCODE_LEFTBRACKET as i32, - RightBracket = sys::SDL_Scancode::SDL_SCANCODE_RIGHTBRACKET as i32, - Backslash = sys::SDL_Scancode::SDL_SCANCODE_BACKSLASH as i32, - NonUsHash = sys::SDL_Scancode::SDL_SCANCODE_NONUSHASH as i32, - Semicolon = sys::SDL_Scancode::SDL_SCANCODE_SEMICOLON as i32, - Apostrophe = sys::SDL_Scancode::SDL_SCANCODE_APOSTROPHE as i32, - Grave = sys::SDL_Scancode::SDL_SCANCODE_GRAVE as i32, - Comma = sys::SDL_Scancode::SDL_SCANCODE_COMMA as i32, - Period = sys::SDL_Scancode::SDL_SCANCODE_PERIOD as i32, - Slash = sys::SDL_Scancode::SDL_SCANCODE_SLASH as i32, - CapsLock = sys::SDL_Scancode::SDL_SCANCODE_CAPSLOCK as i32, - F1 = sys::SDL_Scancode::SDL_SCANCODE_F1 as i32, - F2 = sys::SDL_Scancode::SDL_SCANCODE_F2 as i32, - F3 = sys::SDL_Scancode::SDL_SCANCODE_F3 as i32, - F4 = sys::SDL_Scancode::SDL_SCANCODE_F4 as i32, - F5 = sys::SDL_Scancode::SDL_SCANCODE_F5 as i32, - F6 = sys::SDL_Scancode::SDL_SCANCODE_F6 as i32, - F7 = sys::SDL_Scancode::SDL_SCANCODE_F7 as i32, - F8 = sys::SDL_Scancode::SDL_SCANCODE_F8 as i32, - F9 = sys::SDL_Scancode::SDL_SCANCODE_F9 as i32, - F10 = sys::SDL_Scancode::SDL_SCANCODE_F10 as i32, - F11 = sys::SDL_Scancode::SDL_SCANCODE_F11 as i32, - F12 = sys::SDL_Scancode::SDL_SCANCODE_F12 as i32, - PrintScreen = sys::SDL_Scancode::SDL_SCANCODE_PRINTSCREEN as i32, - ScrollLock = sys::SDL_Scancode::SDL_SCANCODE_SCROLLLOCK as i32, - Pause = sys::SDL_Scancode::SDL_SCANCODE_PAUSE as i32, - Insert = sys::SDL_Scancode::SDL_SCANCODE_INSERT as i32, - Home = sys::SDL_Scancode::SDL_SCANCODE_HOME as i32, - PageUp = sys::SDL_Scancode::SDL_SCANCODE_PAGEUP as i32, - Delete = sys::SDL_Scancode::SDL_SCANCODE_DELETE as i32, - End = sys::SDL_Scancode::SDL_SCANCODE_END as i32, - PageDown = sys::SDL_Scancode::SDL_SCANCODE_PAGEDOWN as i32, - Right = sys::SDL_Scancode::SDL_SCANCODE_RIGHT as i32, - Left = sys::SDL_Scancode::SDL_SCANCODE_LEFT as i32, - Down = sys::SDL_Scancode::SDL_SCANCODE_DOWN as i32, - Up = sys::SDL_Scancode::SDL_SCANCODE_UP as i32, - NumLockClear = sys::SDL_Scancode::SDL_SCANCODE_NUMLOCKCLEAR as i32, - KpDivide = sys::SDL_Scancode::SDL_SCANCODE_KP_DIVIDE as i32, - KpMultiply = sys::SDL_Scancode::SDL_SCANCODE_KP_MULTIPLY as i32, - KpMinus = sys::SDL_Scancode::SDL_SCANCODE_KP_MINUS as i32, - KpPlus = sys::SDL_Scancode::SDL_SCANCODE_KP_PLUS as i32, - KpEnter = sys::SDL_Scancode::SDL_SCANCODE_KP_ENTER as i32, - Kp1 = sys::SDL_Scancode::SDL_SCANCODE_KP_1 as i32, - Kp2 = sys::SDL_Scancode::SDL_SCANCODE_KP_2 as i32, - Kp3 = sys::SDL_Scancode::SDL_SCANCODE_KP_3 as i32, - Kp4 = sys::SDL_Scancode::SDL_SCANCODE_KP_4 as i32, - Kp5 = sys::SDL_Scancode::SDL_SCANCODE_KP_5 as i32, - Kp6 = sys::SDL_Scancode::SDL_SCANCODE_KP_6 as i32, - Kp7 = sys::SDL_Scancode::SDL_SCANCODE_KP_7 as i32, - Kp8 = sys::SDL_Scancode::SDL_SCANCODE_KP_8 as i32, - Kp9 = sys::SDL_Scancode::SDL_SCANCODE_KP_9 as i32, - Kp0 = sys::SDL_Scancode::SDL_SCANCODE_KP_0 as i32, - KpPeriod = sys::SDL_Scancode::SDL_SCANCODE_KP_PERIOD as i32, - NonUsBackslash = sys::SDL_Scancode::SDL_SCANCODE_NONUSBACKSLASH as i32, - Application = sys::SDL_Scancode::SDL_SCANCODE_APPLICATION as i32, - Power = sys::SDL_Scancode::SDL_SCANCODE_POWER as i32, - KpEquals = sys::SDL_Scancode::SDL_SCANCODE_KP_EQUALS as i32, - F13 = sys::SDL_Scancode::SDL_SCANCODE_F13 as i32, - F14 = sys::SDL_Scancode::SDL_SCANCODE_F14 as i32, - F15 = sys::SDL_Scancode::SDL_SCANCODE_F15 as i32, - F16 = sys::SDL_Scancode::SDL_SCANCODE_F16 as i32, - F17 = sys::SDL_Scancode::SDL_SCANCODE_F17 as i32, - F18 = sys::SDL_Scancode::SDL_SCANCODE_F18 as i32, - F19 = sys::SDL_Scancode::SDL_SCANCODE_F19 as i32, - F20 = sys::SDL_Scancode::SDL_SCANCODE_F20 as i32, - F21 = sys::SDL_Scancode::SDL_SCANCODE_F21 as i32, - F22 = sys::SDL_Scancode::SDL_SCANCODE_F22 as i32, - F23 = sys::SDL_Scancode::SDL_SCANCODE_F23 as i32, - F24 = sys::SDL_Scancode::SDL_SCANCODE_F24 as i32, - Execute = sys::SDL_Scancode::SDL_SCANCODE_EXECUTE as i32, - Help = sys::SDL_Scancode::SDL_SCANCODE_HELP as i32, - Menu = sys::SDL_Scancode::SDL_SCANCODE_MENU as i32, - Select = sys::SDL_Scancode::SDL_SCANCODE_SELECT as i32, - Stop = sys::SDL_Scancode::SDL_SCANCODE_STOP as i32, - Again = sys::SDL_Scancode::SDL_SCANCODE_AGAIN as i32, - Undo = sys::SDL_Scancode::SDL_SCANCODE_UNDO as i32, - Cut = sys::SDL_Scancode::SDL_SCANCODE_CUT as i32, - Copy = sys::SDL_Scancode::SDL_SCANCODE_COPY as i32, - Paste = sys::SDL_Scancode::SDL_SCANCODE_PASTE as i32, - Find = sys::SDL_Scancode::SDL_SCANCODE_FIND as i32, - Mute = sys::SDL_Scancode::SDL_SCANCODE_MUTE as i32, - VolumeUp = sys::SDL_Scancode::SDL_SCANCODE_VOLUMEUP as i32, - VolumeDown = sys::SDL_Scancode::SDL_SCANCODE_VOLUMEDOWN as i32, - KpComma = sys::SDL_Scancode::SDL_SCANCODE_KP_COMMA as i32, - KpEqualsAS400 = sys::SDL_Scancode::SDL_SCANCODE_KP_EQUALSAS400 as i32, - International1 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL1 as i32, - International2 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL2 as i32, - International3 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL3 as i32, - International4 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL4 as i32, - International5 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL5 as i32, - International6 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL6 as i32, - International7 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL7 as i32, - International8 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL8 as i32, - International9 = sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL9 as i32, - Lang1 = sys::SDL_Scancode::SDL_SCANCODE_LANG1 as i32, - Lang2 = sys::SDL_Scancode::SDL_SCANCODE_LANG2 as i32, - Lang3 = sys::SDL_Scancode::SDL_SCANCODE_LANG3 as i32, - Lang4 = sys::SDL_Scancode::SDL_SCANCODE_LANG4 as i32, - Lang5 = sys::SDL_Scancode::SDL_SCANCODE_LANG5 as i32, - Lang6 = sys::SDL_Scancode::SDL_SCANCODE_LANG6 as i32, - Lang7 = sys::SDL_Scancode::SDL_SCANCODE_LANG7 as i32, - Lang8 = sys::SDL_Scancode::SDL_SCANCODE_LANG8 as i32, - Lang9 = sys::SDL_Scancode::SDL_SCANCODE_LANG9 as i32, - AltErase = sys::SDL_Scancode::SDL_SCANCODE_ALTERASE as i32, - SysReq = sys::SDL_Scancode::SDL_SCANCODE_SYSREQ as i32, - Cancel = sys::SDL_Scancode::SDL_SCANCODE_CANCEL as i32, - Clear = sys::SDL_Scancode::SDL_SCANCODE_CLEAR as i32, - Prior = sys::SDL_Scancode::SDL_SCANCODE_PRIOR as i32, - Return2 = sys::SDL_Scancode::SDL_SCANCODE_RETURN2 as i32, - Separator = sys::SDL_Scancode::SDL_SCANCODE_SEPARATOR as i32, - Out = sys::SDL_Scancode::SDL_SCANCODE_OUT as i32, - Oper = sys::SDL_Scancode::SDL_SCANCODE_OPER as i32, - ClearAgain = sys::SDL_Scancode::SDL_SCANCODE_CLEARAGAIN as i32, - CrSel = sys::SDL_Scancode::SDL_SCANCODE_CRSEL as i32, - ExSel = sys::SDL_Scancode::SDL_SCANCODE_EXSEL as i32, - Kp00 = sys::SDL_Scancode::SDL_SCANCODE_KP_00 as i32, - Kp000 = sys::SDL_Scancode::SDL_SCANCODE_KP_000 as i32, - ThousandsSeparator = sys::SDL_Scancode::SDL_SCANCODE_THOUSANDSSEPARATOR as i32, - DecimalSeparator = sys::SDL_Scancode::SDL_SCANCODE_DECIMALSEPARATOR as i32, - CurrencyUnit = sys::SDL_Scancode::SDL_SCANCODE_CURRENCYUNIT as i32, - CurrencySubUnit = sys::SDL_Scancode::SDL_SCANCODE_CURRENCYSUBUNIT as i32, - KpLeftParen = sys::SDL_Scancode::SDL_SCANCODE_KP_LEFTPAREN as i32, - KpRightParen = sys::SDL_Scancode::SDL_SCANCODE_KP_RIGHTPAREN as i32, - KpLeftBrace = sys::SDL_Scancode::SDL_SCANCODE_KP_LEFTBRACE as i32, - KpRightBrace = sys::SDL_Scancode::SDL_SCANCODE_KP_RIGHTBRACE as i32, - KpTab = sys::SDL_Scancode::SDL_SCANCODE_KP_TAB as i32, - KpBackspace = sys::SDL_Scancode::SDL_SCANCODE_KP_BACKSPACE as i32, - KpA = sys::SDL_Scancode::SDL_SCANCODE_KP_A as i32, - KpB = sys::SDL_Scancode::SDL_SCANCODE_KP_B as i32, - KpC = sys::SDL_Scancode::SDL_SCANCODE_KP_C as i32, - KpD = sys::SDL_Scancode::SDL_SCANCODE_KP_D as i32, - KpE = sys::SDL_Scancode::SDL_SCANCODE_KP_E as i32, - KpF = sys::SDL_Scancode::SDL_SCANCODE_KP_F as i32, - KpXor = sys::SDL_Scancode::SDL_SCANCODE_KP_XOR as i32, - KpPower = sys::SDL_Scancode::SDL_SCANCODE_KP_POWER as i32, - KpPercent = sys::SDL_Scancode::SDL_SCANCODE_KP_PERCENT as i32, - KpLess = sys::SDL_Scancode::SDL_SCANCODE_KP_LESS as i32, - KpGreater = sys::SDL_Scancode::SDL_SCANCODE_KP_GREATER as i32, - KpAmpersand = sys::SDL_Scancode::SDL_SCANCODE_KP_AMPERSAND as i32, - KpDblAmpersand = sys::SDL_Scancode::SDL_SCANCODE_KP_DBLAMPERSAND as i32, - KpVerticalBar = sys::SDL_Scancode::SDL_SCANCODE_KP_VERTICALBAR as i32, - KpDblVerticalBar = sys::SDL_Scancode::SDL_SCANCODE_KP_DBLVERTICALBAR as i32, - KpColon = sys::SDL_Scancode::SDL_SCANCODE_KP_COLON as i32, - KpHash = sys::SDL_Scancode::SDL_SCANCODE_KP_HASH as i32, - KpSpace = sys::SDL_Scancode::SDL_SCANCODE_KP_SPACE as i32, - KpAt = sys::SDL_Scancode::SDL_SCANCODE_KP_AT as i32, - KpExclam = sys::SDL_Scancode::SDL_SCANCODE_KP_EXCLAM as i32, - KpMemStore = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMSTORE as i32, - KpMemRecall = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMRECALL as i32, - KpMemClear = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMCLEAR as i32, - KpMemAdd = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMADD as i32, - KpMemSubtract = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMSUBTRACT as i32, - KpMemMultiply = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMMULTIPLY as i32, - KpMemDivide = sys::SDL_Scancode::SDL_SCANCODE_KP_MEMDIVIDE as i32, - KpPlusMinus = sys::SDL_Scancode::SDL_SCANCODE_KP_PLUSMINUS as i32, - KpClear = sys::SDL_Scancode::SDL_SCANCODE_KP_CLEAR as i32, - KpClearEntry = sys::SDL_Scancode::SDL_SCANCODE_KP_CLEARENTRY as i32, - KpBinary = sys::SDL_Scancode::SDL_SCANCODE_KP_BINARY as i32, - KpOctal = sys::SDL_Scancode::SDL_SCANCODE_KP_OCTAL as i32, - KpDecimal = sys::SDL_Scancode::SDL_SCANCODE_KP_DECIMAL as i32, - KpHexadecimal = sys::SDL_Scancode::SDL_SCANCODE_KP_HEXADECIMAL as i32, - LCtrl = sys::SDL_Scancode::SDL_SCANCODE_LCTRL as i32, - LShift = sys::SDL_Scancode::SDL_SCANCODE_LSHIFT as i32, - LAlt = sys::SDL_Scancode::SDL_SCANCODE_LALT as i32, - LGui = sys::SDL_Scancode::SDL_SCANCODE_LGUI as i32, - RCtrl = sys::SDL_Scancode::SDL_SCANCODE_RCTRL as i32, - RShift = sys::SDL_Scancode::SDL_SCANCODE_RSHIFT as i32, - RAlt = sys::SDL_Scancode::SDL_SCANCODE_RALT as i32, - RGui = sys::SDL_Scancode::SDL_SCANCODE_RGUI as i32, - Mode = sys::SDL_Scancode::SDL_SCANCODE_MODE as i32, - AudioNext = sys::SDL_Scancode::SDL_SCANCODE_AUDIONEXT as i32, - AudioPrev = sys::SDL_Scancode::SDL_SCANCODE_AUDIOPREV as i32, - AudioStop = sys::SDL_Scancode::SDL_SCANCODE_AUDIOSTOP as i32, - AudioPlay = sys::SDL_Scancode::SDL_SCANCODE_AUDIOPLAY as i32, - AudioMute = sys::SDL_Scancode::SDL_SCANCODE_AUDIOMUTE as i32, - MediaSelect = sys::SDL_Scancode::SDL_SCANCODE_MEDIASELECT as i32, - Www = sys::SDL_Scancode::SDL_SCANCODE_WWW as i32, - Mail = sys::SDL_Scancode::SDL_SCANCODE_MAIL as i32, - Calculator = sys::SDL_Scancode::SDL_SCANCODE_CALCULATOR as i32, - Computer = sys::SDL_Scancode::SDL_SCANCODE_COMPUTER as i32, - AcSearch = sys::SDL_Scancode::SDL_SCANCODE_AC_SEARCH as i32, - AcHome = sys::SDL_Scancode::SDL_SCANCODE_AC_HOME as i32, - AcBack = sys::SDL_Scancode::SDL_SCANCODE_AC_BACK as i32, - AcForward = sys::SDL_Scancode::SDL_SCANCODE_AC_FORWARD as i32, - AcStop = sys::SDL_Scancode::SDL_SCANCODE_AC_STOP as i32, - AcRefresh = sys::SDL_Scancode::SDL_SCANCODE_AC_REFRESH as i32, - AcBookmarks = sys::SDL_Scancode::SDL_SCANCODE_AC_BOOKMARKS as i32, - BrightnessDown = sys::SDL_Scancode::SDL_SCANCODE_BRIGHTNESSDOWN as i32, - BrightnessUp = sys::SDL_Scancode::SDL_SCANCODE_BRIGHTNESSUP as i32, - DisplaySwitch = sys::SDL_Scancode::SDL_SCANCODE_DISPLAYSWITCH as i32, - KbdIllumToggle = sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMTOGGLE as i32, - KbdIllumDown = sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMDOWN as i32, - KbdIllumUp = sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMUP as i32, - Eject = sys::SDL_Scancode::SDL_SCANCODE_EJECT as i32, - Sleep = sys::SDL_Scancode::SDL_SCANCODE_SLEEP as i32, - App1 = sys::SDL_Scancode::SDL_SCANCODE_APP1 as i32, - App2 = sys::SDL_Scancode::SDL_SCANCODE_APP2 as i32, - Num = sys::SDL_Scancode::SDL_NUM_SCANCODES as i32, + A = SDL_Scancode::SDL_SCANCODE_A as i32, + B = SDL_Scancode::SDL_SCANCODE_B as i32, + C = SDL_Scancode::SDL_SCANCODE_C as i32, + D = SDL_Scancode::SDL_SCANCODE_D as i32, + E = SDL_Scancode::SDL_SCANCODE_E as i32, + F = SDL_Scancode::SDL_SCANCODE_F as i32, + G = SDL_Scancode::SDL_SCANCODE_G as i32, + H = SDL_Scancode::SDL_SCANCODE_H as i32, + I = SDL_Scancode::SDL_SCANCODE_I as i32, + J = SDL_Scancode::SDL_SCANCODE_J as i32, + K = SDL_Scancode::SDL_SCANCODE_K as i32, + L = SDL_Scancode::SDL_SCANCODE_L as i32, + M = SDL_Scancode::SDL_SCANCODE_M as i32, + N = SDL_Scancode::SDL_SCANCODE_N as i32, + O = SDL_Scancode::SDL_SCANCODE_O as i32, + P = SDL_Scancode::SDL_SCANCODE_P as i32, + Q = SDL_Scancode::SDL_SCANCODE_Q as i32, + R = SDL_Scancode::SDL_SCANCODE_R as i32, + S = SDL_Scancode::SDL_SCANCODE_S as i32, + T = SDL_Scancode::SDL_SCANCODE_T as i32, + U = SDL_Scancode::SDL_SCANCODE_U as i32, + V = SDL_Scancode::SDL_SCANCODE_V as i32, + W = SDL_Scancode::SDL_SCANCODE_W as i32, + X = SDL_Scancode::SDL_SCANCODE_X as i32, + Y = SDL_Scancode::SDL_SCANCODE_Y as i32, + Z = SDL_Scancode::SDL_SCANCODE_Z as i32, + Num1 = SDL_Scancode::SDL_SCANCODE_1 as i32, + Num2 = SDL_Scancode::SDL_SCANCODE_2 as i32, + Num3 = SDL_Scancode::SDL_SCANCODE_3 as i32, + Num4 = SDL_Scancode::SDL_SCANCODE_4 as i32, + Num5 = SDL_Scancode::SDL_SCANCODE_5 as i32, + Num6 = SDL_Scancode::SDL_SCANCODE_6 as i32, + Num7 = SDL_Scancode::SDL_SCANCODE_7 as i32, + Num8 = SDL_Scancode::SDL_SCANCODE_8 as i32, + Num9 = SDL_Scancode::SDL_SCANCODE_9 as i32, + Num0 = SDL_Scancode::SDL_SCANCODE_0 as i32, + Return = SDL_Scancode::SDL_SCANCODE_RETURN as i32, + Escape = SDL_Scancode::SDL_SCANCODE_ESCAPE as i32, + Backspace = SDL_Scancode::SDL_SCANCODE_BACKSPACE as i32, + Tab = SDL_Scancode::SDL_SCANCODE_TAB as i32, + Space = SDL_Scancode::SDL_SCANCODE_SPACE as i32, + Minus = SDL_Scancode::SDL_SCANCODE_MINUS as i32, + Equals = SDL_Scancode::SDL_SCANCODE_EQUALS as i32, + LeftBracket = SDL_Scancode::SDL_SCANCODE_LEFTBRACKET as i32, + RightBracket = SDL_Scancode::SDL_SCANCODE_RIGHTBRACKET as i32, + Backslash = SDL_Scancode::SDL_SCANCODE_BACKSLASH as i32, + NonUsHash = SDL_Scancode::SDL_SCANCODE_NONUSHASH as i32, + Semicolon = SDL_Scancode::SDL_SCANCODE_SEMICOLON as i32, + Apostrophe = SDL_Scancode::SDL_SCANCODE_APOSTROPHE as i32, + Grave = SDL_Scancode::SDL_SCANCODE_GRAVE as i32, + Comma = SDL_Scancode::SDL_SCANCODE_COMMA as i32, + Period = SDL_Scancode::SDL_SCANCODE_PERIOD as i32, + Slash = SDL_Scancode::SDL_SCANCODE_SLASH as i32, + CapsLock = SDL_Scancode::SDL_SCANCODE_CAPSLOCK as i32, + F1 = SDL_Scancode::SDL_SCANCODE_F1 as i32, + F2 = SDL_Scancode::SDL_SCANCODE_F2 as i32, + F3 = SDL_Scancode::SDL_SCANCODE_F3 as i32, + F4 = SDL_Scancode::SDL_SCANCODE_F4 as i32, + F5 = SDL_Scancode::SDL_SCANCODE_F5 as i32, + F6 = SDL_Scancode::SDL_SCANCODE_F6 as i32, + F7 = SDL_Scancode::SDL_SCANCODE_F7 as i32, + F8 = SDL_Scancode::SDL_SCANCODE_F8 as i32, + F9 = SDL_Scancode::SDL_SCANCODE_F9 as i32, + F10 = SDL_Scancode::SDL_SCANCODE_F10 as i32, + F11 = SDL_Scancode::SDL_SCANCODE_F11 as i32, + F12 = SDL_Scancode::SDL_SCANCODE_F12 as i32, + PrintScreen = SDL_Scancode::SDL_SCANCODE_PRINTSCREEN as i32, + ScrollLock = SDL_Scancode::SDL_SCANCODE_SCROLLLOCK as i32, + Pause = SDL_Scancode::SDL_SCANCODE_PAUSE as i32, + Insert = SDL_Scancode::SDL_SCANCODE_INSERT as i32, + Home = SDL_Scancode::SDL_SCANCODE_HOME as i32, + PageUp = SDL_Scancode::SDL_SCANCODE_PAGEUP as i32, + Delete = SDL_Scancode::SDL_SCANCODE_DELETE as i32, + End = SDL_Scancode::SDL_SCANCODE_END as i32, + PageDown = SDL_Scancode::SDL_SCANCODE_PAGEDOWN as i32, + Right = SDL_Scancode::SDL_SCANCODE_RIGHT as i32, + Left = SDL_Scancode::SDL_SCANCODE_LEFT as i32, + Down = SDL_Scancode::SDL_SCANCODE_DOWN as i32, + Up = SDL_Scancode::SDL_SCANCODE_UP as i32, + NumLockClear = SDL_Scancode::SDL_SCANCODE_NUMLOCKCLEAR as i32, + KpDivide = SDL_Scancode::SDL_SCANCODE_KP_DIVIDE as i32, + KpMultiply = SDL_Scancode::SDL_SCANCODE_KP_MULTIPLY as i32, + KpMinus = SDL_Scancode::SDL_SCANCODE_KP_MINUS as i32, + KpPlus = SDL_Scancode::SDL_SCANCODE_KP_PLUS as i32, + KpEnter = SDL_Scancode::SDL_SCANCODE_KP_ENTER as i32, + Kp1 = SDL_Scancode::SDL_SCANCODE_KP_1 as i32, + Kp2 = SDL_Scancode::SDL_SCANCODE_KP_2 as i32, + Kp3 = SDL_Scancode::SDL_SCANCODE_KP_3 as i32, + Kp4 = SDL_Scancode::SDL_SCANCODE_KP_4 as i32, + Kp5 = SDL_Scancode::SDL_SCANCODE_KP_5 as i32, + Kp6 = SDL_Scancode::SDL_SCANCODE_KP_6 as i32, + Kp7 = SDL_Scancode::SDL_SCANCODE_KP_7 as i32, + Kp8 = SDL_Scancode::SDL_SCANCODE_KP_8 as i32, + Kp9 = SDL_Scancode::SDL_SCANCODE_KP_9 as i32, + Kp0 = SDL_Scancode::SDL_SCANCODE_KP_0 as i32, + KpPeriod = SDL_Scancode::SDL_SCANCODE_KP_PERIOD as i32, + NonUsBackslash = SDL_Scancode::SDL_SCANCODE_NONUSBACKSLASH as i32, + Application = SDL_Scancode::SDL_SCANCODE_APPLICATION as i32, + Power = SDL_Scancode::SDL_SCANCODE_POWER as i32, + KpEquals = SDL_Scancode::SDL_SCANCODE_KP_EQUALS as i32, + F13 = SDL_Scancode::SDL_SCANCODE_F13 as i32, + F14 = SDL_Scancode::SDL_SCANCODE_F14 as i32, + F15 = SDL_Scancode::SDL_SCANCODE_F15 as i32, + F16 = SDL_Scancode::SDL_SCANCODE_F16 as i32, + F17 = SDL_Scancode::SDL_SCANCODE_F17 as i32, + F18 = SDL_Scancode::SDL_SCANCODE_F18 as i32, + F19 = SDL_Scancode::SDL_SCANCODE_F19 as i32, + F20 = SDL_Scancode::SDL_SCANCODE_F20 as i32, + F21 = SDL_Scancode::SDL_SCANCODE_F21 as i32, + F22 = SDL_Scancode::SDL_SCANCODE_F22 as i32, + F23 = SDL_Scancode::SDL_SCANCODE_F23 as i32, + F24 = SDL_Scancode::SDL_SCANCODE_F24 as i32, + Execute = SDL_Scancode::SDL_SCANCODE_EXECUTE as i32, + Help = SDL_Scancode::SDL_SCANCODE_HELP as i32, + Menu = SDL_Scancode::SDL_SCANCODE_MENU as i32, + Select = SDL_Scancode::SDL_SCANCODE_SELECT as i32, + Stop = SDL_Scancode::SDL_SCANCODE_STOP as i32, + Again = SDL_Scancode::SDL_SCANCODE_AGAIN as i32, + Undo = SDL_Scancode::SDL_SCANCODE_UNDO as i32, + Cut = SDL_Scancode::SDL_SCANCODE_CUT as i32, + Copy = SDL_Scancode::SDL_SCANCODE_COPY as i32, + Paste = SDL_Scancode::SDL_SCANCODE_PASTE as i32, + Find = SDL_Scancode::SDL_SCANCODE_FIND as i32, + Mute = SDL_Scancode::SDL_SCANCODE_MUTE as i32, + VolumeUp = SDL_Scancode::SDL_SCANCODE_VOLUMEUP as i32, + VolumeDown = SDL_Scancode::SDL_SCANCODE_VOLUMEDOWN as i32, + KpComma = SDL_Scancode::SDL_SCANCODE_KP_COMMA as i32, + KpEqualsAS400 = SDL_Scancode::SDL_SCANCODE_KP_EQUALSAS400 as i32, + International1 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL1 as i32, + International2 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL2 as i32, + International3 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL3 as i32, + International4 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL4 as i32, + International5 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL5 as i32, + International6 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL6 as i32, + International7 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL7 as i32, + International8 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL8 as i32, + International9 = SDL_Scancode::SDL_SCANCODE_INTERNATIONAL9 as i32, + Lang1 = SDL_Scancode::SDL_SCANCODE_LANG1 as i32, + Lang2 = SDL_Scancode::SDL_SCANCODE_LANG2 as i32, + Lang3 = SDL_Scancode::SDL_SCANCODE_LANG3 as i32, + Lang4 = SDL_Scancode::SDL_SCANCODE_LANG4 as i32, + Lang5 = SDL_Scancode::SDL_SCANCODE_LANG5 as i32, + Lang6 = SDL_Scancode::SDL_SCANCODE_LANG6 as i32, + Lang7 = SDL_Scancode::SDL_SCANCODE_LANG7 as i32, + Lang8 = SDL_Scancode::SDL_SCANCODE_LANG8 as i32, + Lang9 = SDL_Scancode::SDL_SCANCODE_LANG9 as i32, + AltErase = SDL_Scancode::SDL_SCANCODE_ALTERASE as i32, + SysReq = SDL_Scancode::SDL_SCANCODE_SYSREQ as i32, + Cancel = SDL_Scancode::SDL_SCANCODE_CANCEL as i32, + Clear = SDL_Scancode::SDL_SCANCODE_CLEAR as i32, + Prior = SDL_Scancode::SDL_SCANCODE_PRIOR as i32, + Return2 = SDL_Scancode::SDL_SCANCODE_RETURN2 as i32, + Separator = SDL_Scancode::SDL_SCANCODE_SEPARATOR as i32, + Out = SDL_Scancode::SDL_SCANCODE_OUT as i32, + Oper = SDL_Scancode::SDL_SCANCODE_OPER as i32, + ClearAgain = SDL_Scancode::SDL_SCANCODE_CLEARAGAIN as i32, + CrSel = SDL_Scancode::SDL_SCANCODE_CRSEL as i32, + ExSel = SDL_Scancode::SDL_SCANCODE_EXSEL as i32, + Kp00 = SDL_Scancode::SDL_SCANCODE_KP_00 as i32, + Kp000 = SDL_Scancode::SDL_SCANCODE_KP_000 as i32, + ThousandsSeparator = SDL_Scancode::SDL_SCANCODE_THOUSANDSSEPARATOR as i32, + DecimalSeparator = SDL_Scancode::SDL_SCANCODE_DECIMALSEPARATOR as i32, + CurrencyUnit = SDL_Scancode::SDL_SCANCODE_CURRENCYUNIT as i32, + CurrencySubUnit = SDL_Scancode::SDL_SCANCODE_CURRENCYSUBUNIT as i32, + KpLeftParen = SDL_Scancode::SDL_SCANCODE_KP_LEFTPAREN as i32, + KpRightParen = SDL_Scancode::SDL_SCANCODE_KP_RIGHTPAREN as i32, + KpLeftBrace = SDL_Scancode::SDL_SCANCODE_KP_LEFTBRACE as i32, + KpRightBrace = SDL_Scancode::SDL_SCANCODE_KP_RIGHTBRACE as i32, + KpTab = SDL_Scancode::SDL_SCANCODE_KP_TAB as i32, + KpBackspace = SDL_Scancode::SDL_SCANCODE_KP_BACKSPACE as i32, + KpA = SDL_Scancode::SDL_SCANCODE_KP_A as i32, + KpB = SDL_Scancode::SDL_SCANCODE_KP_B as i32, + KpC = SDL_Scancode::SDL_SCANCODE_KP_C as i32, + KpD = SDL_Scancode::SDL_SCANCODE_KP_D as i32, + KpE = SDL_Scancode::SDL_SCANCODE_KP_E as i32, + KpF = SDL_Scancode::SDL_SCANCODE_KP_F as i32, + KpXor = SDL_Scancode::SDL_SCANCODE_KP_XOR as i32, + KpPower = SDL_Scancode::SDL_SCANCODE_KP_POWER as i32, + KpPercent = SDL_Scancode::SDL_SCANCODE_KP_PERCENT as i32, + KpLess = SDL_Scancode::SDL_SCANCODE_KP_LESS as i32, + KpGreater = SDL_Scancode::SDL_SCANCODE_KP_GREATER as i32, + KpAmpersand = SDL_Scancode::SDL_SCANCODE_KP_AMPERSAND as i32, + KpDblAmpersand = SDL_Scancode::SDL_SCANCODE_KP_DBLAMPERSAND as i32, + KpVerticalBar = SDL_Scancode::SDL_SCANCODE_KP_VERTICALBAR as i32, + KpDblVerticalBar = SDL_Scancode::SDL_SCANCODE_KP_DBLVERTICALBAR as i32, + KpColon = SDL_Scancode::SDL_SCANCODE_KP_COLON as i32, + KpHash = SDL_Scancode::SDL_SCANCODE_KP_HASH as i32, + KpSpace = SDL_Scancode::SDL_SCANCODE_KP_SPACE as i32, + KpAt = SDL_Scancode::SDL_SCANCODE_KP_AT as i32, + KpExclam = SDL_Scancode::SDL_SCANCODE_KP_EXCLAM as i32, + KpMemStore = SDL_Scancode::SDL_SCANCODE_KP_MEMSTORE as i32, + KpMemRecall = SDL_Scancode::SDL_SCANCODE_KP_MEMRECALL as i32, + KpMemClear = SDL_Scancode::SDL_SCANCODE_KP_MEMCLEAR as i32, + KpMemAdd = SDL_Scancode::SDL_SCANCODE_KP_MEMADD as i32, + KpMemSubtract = SDL_Scancode::SDL_SCANCODE_KP_MEMSUBTRACT as i32, + KpMemMultiply = SDL_Scancode::SDL_SCANCODE_KP_MEMMULTIPLY as i32, + KpMemDivide = SDL_Scancode::SDL_SCANCODE_KP_MEMDIVIDE as i32, + KpPlusMinus = SDL_Scancode::SDL_SCANCODE_KP_PLUSMINUS as i32, + KpClear = SDL_Scancode::SDL_SCANCODE_KP_CLEAR as i32, + KpClearEntry = SDL_Scancode::SDL_SCANCODE_KP_CLEARENTRY as i32, + KpBinary = SDL_Scancode::SDL_SCANCODE_KP_BINARY as i32, + KpOctal = SDL_Scancode::SDL_SCANCODE_KP_OCTAL as i32, + KpDecimal = SDL_Scancode::SDL_SCANCODE_KP_DECIMAL as i32, + KpHexadecimal = SDL_Scancode::SDL_SCANCODE_KP_HEXADECIMAL as i32, + LCtrl = SDL_Scancode::SDL_SCANCODE_LCTRL as i32, + LShift = SDL_Scancode::SDL_SCANCODE_LSHIFT as i32, + LAlt = SDL_Scancode::SDL_SCANCODE_LALT as i32, + LGui = SDL_Scancode::SDL_SCANCODE_LGUI as i32, + RCtrl = SDL_Scancode::SDL_SCANCODE_RCTRL as i32, + RShift = SDL_Scancode::SDL_SCANCODE_RSHIFT as i32, + RAlt = SDL_Scancode::SDL_SCANCODE_RALT as i32, + RGui = SDL_Scancode::SDL_SCANCODE_RGUI as i32, + Mode = SDL_Scancode::SDL_SCANCODE_MODE as i32, + AudioNext = SDL_Scancode::SDL_SCANCODE_AUDIONEXT as i32, + AudioPrev = SDL_Scancode::SDL_SCANCODE_AUDIOPREV as i32, + AudioStop = SDL_Scancode::SDL_SCANCODE_AUDIOSTOP as i32, + AudioPlay = SDL_Scancode::SDL_SCANCODE_AUDIOPLAY as i32, + AudioMute = SDL_Scancode::SDL_SCANCODE_AUDIOMUTE as i32, + MediaSelect = SDL_Scancode::SDL_SCANCODE_MEDIASELECT as i32, + Www = SDL_Scancode::SDL_SCANCODE_WWW as i32, + Mail = SDL_Scancode::SDL_SCANCODE_MAIL as i32, + Calculator = SDL_Scancode::SDL_SCANCODE_CALCULATOR as i32, + Computer = SDL_Scancode::SDL_SCANCODE_COMPUTER as i32, + AcSearch = SDL_Scancode::SDL_SCANCODE_AC_SEARCH as i32, + AcHome = SDL_Scancode::SDL_SCANCODE_AC_HOME as i32, + AcBack = SDL_Scancode::SDL_SCANCODE_AC_BACK as i32, + AcForward = SDL_Scancode::SDL_SCANCODE_AC_FORWARD as i32, + AcStop = SDL_Scancode::SDL_SCANCODE_AC_STOP as i32, + AcRefresh = SDL_Scancode::SDL_SCANCODE_AC_REFRESH as i32, + AcBookmarks = SDL_Scancode::SDL_SCANCODE_AC_BOOKMARKS as i32, + BrightnessDown = SDL_Scancode::SDL_SCANCODE_BRIGHTNESSDOWN as i32, + BrightnessUp = SDL_Scancode::SDL_SCANCODE_BRIGHTNESSUP as i32, + DisplaySwitch = SDL_Scancode::SDL_SCANCODE_DISPLAYSWITCH as i32, + KbdIllumToggle = SDL_Scancode::SDL_SCANCODE_KBDILLUMTOGGLE as i32, + KbdIllumDown = SDL_Scancode::SDL_SCANCODE_KBDILLUMDOWN as i32, + KbdIllumUp = SDL_Scancode::SDL_SCANCODE_KBDILLUMUP as i32, + Eject = SDL_Scancode::SDL_SCANCODE_EJECT as i32, + Sleep = SDL_Scancode::SDL_SCANCODE_SLEEP as i32, + App1 = SDL_Scancode::SDL_SCANCODE_APP1 as i32, + App2 = SDL_Scancode::SDL_SCANCODE_APP2 as i32, + Num = SDL_Scancode::SDL_NUM_SCANCODES as i32, } impl Scancode { @@ -257,248 +258,248 @@ impl Scancode { use self::Scancode::*; let n = n as u32; - Some( match unsafe { transmute::(n) } { - sys::SDL_Scancode::SDL_SCANCODE_A => A, - sys::SDL_Scancode::SDL_SCANCODE_B => B, - sys::SDL_Scancode::SDL_SCANCODE_C => C, - sys::SDL_Scancode::SDL_SCANCODE_D => D, - sys::SDL_Scancode::SDL_SCANCODE_E => E, - sys::SDL_Scancode::SDL_SCANCODE_F => F, - sys::SDL_Scancode::SDL_SCANCODE_G => G, - sys::SDL_Scancode::SDL_SCANCODE_H => H, - sys::SDL_Scancode::SDL_SCANCODE_I => I, - sys::SDL_Scancode::SDL_SCANCODE_J => J, - sys::SDL_Scancode::SDL_SCANCODE_K => K, - sys::SDL_Scancode::SDL_SCANCODE_L => L, - sys::SDL_Scancode::SDL_SCANCODE_M => M, - sys::SDL_Scancode::SDL_SCANCODE_N => N, - sys::SDL_Scancode::SDL_SCANCODE_O => O, - sys::SDL_Scancode::SDL_SCANCODE_P => P, - sys::SDL_Scancode::SDL_SCANCODE_Q => Q, - sys::SDL_Scancode::SDL_SCANCODE_R => R, - sys::SDL_Scancode::SDL_SCANCODE_S => S, - sys::SDL_Scancode::SDL_SCANCODE_T => T, - sys::SDL_Scancode::SDL_SCANCODE_U => U, - sys::SDL_Scancode::SDL_SCANCODE_V => V, - sys::SDL_Scancode::SDL_SCANCODE_W => W, - sys::SDL_Scancode::SDL_SCANCODE_X => X, - sys::SDL_Scancode::SDL_SCANCODE_Y => Y, - sys::SDL_Scancode::SDL_SCANCODE_Z => Z, - sys::SDL_Scancode::SDL_SCANCODE_1 => Num1, - sys::SDL_Scancode::SDL_SCANCODE_2 => Num2, - sys::SDL_Scancode::SDL_SCANCODE_3 => Num3, - sys::SDL_Scancode::SDL_SCANCODE_4 => Num4, - sys::SDL_Scancode::SDL_SCANCODE_5 => Num5, - sys::SDL_Scancode::SDL_SCANCODE_6 => Num6, - sys::SDL_Scancode::SDL_SCANCODE_7 => Num7, - sys::SDL_Scancode::SDL_SCANCODE_8 => Num8, - sys::SDL_Scancode::SDL_SCANCODE_9 => Num9, - sys::SDL_Scancode::SDL_SCANCODE_0 => Num0, - sys::SDL_Scancode::SDL_SCANCODE_RETURN => Return, - sys::SDL_Scancode::SDL_SCANCODE_ESCAPE => Escape, - sys::SDL_Scancode::SDL_SCANCODE_BACKSPACE => Backspace, - sys::SDL_Scancode::SDL_SCANCODE_TAB => Tab, - sys::SDL_Scancode::SDL_SCANCODE_SPACE => Space, - sys::SDL_Scancode::SDL_SCANCODE_MINUS => Minus, - sys::SDL_Scancode::SDL_SCANCODE_EQUALS => Equals, - sys::SDL_Scancode::SDL_SCANCODE_LEFTBRACKET => LeftBracket, - sys::SDL_Scancode::SDL_SCANCODE_RIGHTBRACKET => RightBracket, - sys::SDL_Scancode::SDL_SCANCODE_BACKSLASH => Backslash, - sys::SDL_Scancode::SDL_SCANCODE_NONUSHASH => NonUsHash, - sys::SDL_Scancode::SDL_SCANCODE_SEMICOLON => Semicolon, - sys::SDL_Scancode::SDL_SCANCODE_APOSTROPHE => Apostrophe, - sys::SDL_Scancode::SDL_SCANCODE_GRAVE => Grave, - sys::SDL_Scancode::SDL_SCANCODE_COMMA => Comma, - sys::SDL_Scancode::SDL_SCANCODE_PERIOD => Period, - sys::SDL_Scancode::SDL_SCANCODE_SLASH => Slash, - sys::SDL_Scancode::SDL_SCANCODE_CAPSLOCK => CapsLock, - sys::SDL_Scancode::SDL_SCANCODE_F1 => F1, - sys::SDL_Scancode::SDL_SCANCODE_F2 => F2, - sys::SDL_Scancode::SDL_SCANCODE_F3 => F3, - sys::SDL_Scancode::SDL_SCANCODE_F4 => F4, - sys::SDL_Scancode::SDL_SCANCODE_F5 => F5, - sys::SDL_Scancode::SDL_SCANCODE_F6 => F6, - sys::SDL_Scancode::SDL_SCANCODE_F7 => F7, - sys::SDL_Scancode::SDL_SCANCODE_F8 => F8, - sys::SDL_Scancode::SDL_SCANCODE_F9 => F9, - sys::SDL_Scancode::SDL_SCANCODE_F10 => F10, - sys::SDL_Scancode::SDL_SCANCODE_F11 => F11, - sys::SDL_Scancode::SDL_SCANCODE_F12 => F12, - sys::SDL_Scancode::SDL_SCANCODE_PRINTSCREEN => PrintScreen, - sys::SDL_Scancode::SDL_SCANCODE_SCROLLLOCK => ScrollLock, - sys::SDL_Scancode::SDL_SCANCODE_PAUSE => Pause, - sys::SDL_Scancode::SDL_SCANCODE_INSERT => Insert, - sys::SDL_Scancode::SDL_SCANCODE_HOME => Home, - sys::SDL_Scancode::SDL_SCANCODE_PAGEUP => PageUp, - sys::SDL_Scancode::SDL_SCANCODE_DELETE => Delete, - sys::SDL_Scancode::SDL_SCANCODE_END => End, - sys::SDL_Scancode::SDL_SCANCODE_PAGEDOWN => PageDown, - sys::SDL_Scancode::SDL_SCANCODE_RIGHT => Right, - sys::SDL_Scancode::SDL_SCANCODE_LEFT => Left, - sys::SDL_Scancode::SDL_SCANCODE_DOWN => Down, - sys::SDL_Scancode::SDL_SCANCODE_UP => Up, - sys::SDL_Scancode::SDL_SCANCODE_NUMLOCKCLEAR => NumLockClear, - sys::SDL_Scancode::SDL_SCANCODE_KP_DIVIDE => KpDivide, - sys::SDL_Scancode::SDL_SCANCODE_KP_MULTIPLY => KpMultiply, - sys::SDL_Scancode::SDL_SCANCODE_KP_MINUS => KpMinus, - sys::SDL_Scancode::SDL_SCANCODE_KP_PLUS => KpPlus, - sys::SDL_Scancode::SDL_SCANCODE_KP_ENTER => KpEnter, - sys::SDL_Scancode::SDL_SCANCODE_KP_1 => Kp1, - sys::SDL_Scancode::SDL_SCANCODE_KP_2 => Kp2, - sys::SDL_Scancode::SDL_SCANCODE_KP_3 => Kp3, - sys::SDL_Scancode::SDL_SCANCODE_KP_4 => Kp4, - sys::SDL_Scancode::SDL_SCANCODE_KP_5 => Kp5, - sys::SDL_Scancode::SDL_SCANCODE_KP_6 => Kp6, - sys::SDL_Scancode::SDL_SCANCODE_KP_7 => Kp7, - sys::SDL_Scancode::SDL_SCANCODE_KP_8 => Kp8, - sys::SDL_Scancode::SDL_SCANCODE_KP_9 => Kp9, - sys::SDL_Scancode::SDL_SCANCODE_KP_0 => Kp0, - sys::SDL_Scancode::SDL_SCANCODE_KP_PERIOD => KpPeriod, - sys::SDL_Scancode::SDL_SCANCODE_NONUSBACKSLASH => NonUsBackslash, - sys::SDL_Scancode::SDL_SCANCODE_APPLICATION => Application, - sys::SDL_Scancode::SDL_SCANCODE_POWER => Power, - sys::SDL_Scancode::SDL_SCANCODE_KP_EQUALS => KpEquals, - sys::SDL_Scancode::SDL_SCANCODE_F13 => F13, - sys::SDL_Scancode::SDL_SCANCODE_F14 => F14, - sys::SDL_Scancode::SDL_SCANCODE_F15 => F15, - sys::SDL_Scancode::SDL_SCANCODE_F16 => F16, - sys::SDL_Scancode::SDL_SCANCODE_F17 => F17, - sys::SDL_Scancode::SDL_SCANCODE_F18 => F18, - sys::SDL_Scancode::SDL_SCANCODE_F19 => F19, - sys::SDL_Scancode::SDL_SCANCODE_F20 => F20, - sys::SDL_Scancode::SDL_SCANCODE_F21 => F21, - sys::SDL_Scancode::SDL_SCANCODE_F22 => F22, - sys::SDL_Scancode::SDL_SCANCODE_F23 => F23, - sys::SDL_Scancode::SDL_SCANCODE_F24 => F24, - sys::SDL_Scancode::SDL_SCANCODE_EXECUTE => Execute, - sys::SDL_Scancode::SDL_SCANCODE_HELP => Help, - sys::SDL_Scancode::SDL_SCANCODE_MENU => Menu, - sys::SDL_Scancode::SDL_SCANCODE_SELECT => Select, - sys::SDL_Scancode::SDL_SCANCODE_STOP => Stop, - sys::SDL_Scancode::SDL_SCANCODE_AGAIN => Again, - sys::SDL_Scancode::SDL_SCANCODE_UNDO => Undo, - sys::SDL_Scancode::SDL_SCANCODE_CUT => Cut, - sys::SDL_Scancode::SDL_SCANCODE_COPY => Copy, - sys::SDL_Scancode::SDL_SCANCODE_PASTE => Paste, - sys::SDL_Scancode::SDL_SCANCODE_FIND => Find, - sys::SDL_Scancode::SDL_SCANCODE_MUTE => Mute, - sys::SDL_Scancode::SDL_SCANCODE_VOLUMEUP => VolumeUp, - sys::SDL_Scancode::SDL_SCANCODE_VOLUMEDOWN => VolumeDown, - sys::SDL_Scancode::SDL_SCANCODE_KP_COMMA => KpComma, - sys::SDL_Scancode::SDL_SCANCODE_KP_EQUALSAS400 => KpEqualsAS400, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL1 => International1, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL2 => International2, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL3 => International3, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL4 => International4, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL5 => International5, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL6 => International6, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL7 => International7, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL8 => International8, - sys::SDL_Scancode::SDL_SCANCODE_INTERNATIONAL9 => International9, - sys::SDL_Scancode::SDL_SCANCODE_LANG1 => Lang1, - sys::SDL_Scancode::SDL_SCANCODE_LANG2 => Lang2, - sys::SDL_Scancode::SDL_SCANCODE_LANG3 => Lang3, - sys::SDL_Scancode::SDL_SCANCODE_LANG4 => Lang4, - sys::SDL_Scancode::SDL_SCANCODE_LANG5 => Lang5, - sys::SDL_Scancode::SDL_SCANCODE_LANG6 => Lang6, - sys::SDL_Scancode::SDL_SCANCODE_LANG7 => Lang7, - sys::SDL_Scancode::SDL_SCANCODE_LANG8 => Lang8, - sys::SDL_Scancode::SDL_SCANCODE_LANG9 => Lang9, - sys::SDL_Scancode::SDL_SCANCODE_ALTERASE => AltErase, - sys::SDL_Scancode::SDL_SCANCODE_SYSREQ => SysReq, - sys::SDL_Scancode::SDL_SCANCODE_CANCEL => Cancel, - sys::SDL_Scancode::SDL_SCANCODE_CLEAR => Clear, - sys::SDL_Scancode::SDL_SCANCODE_PRIOR => Prior, - sys::SDL_Scancode::SDL_SCANCODE_RETURN2 => Return2, - sys::SDL_Scancode::SDL_SCANCODE_SEPARATOR => Separator, - sys::SDL_Scancode::SDL_SCANCODE_OUT => Out, - sys::SDL_Scancode::SDL_SCANCODE_OPER => Oper, - sys::SDL_Scancode::SDL_SCANCODE_CLEARAGAIN => ClearAgain, - sys::SDL_Scancode::SDL_SCANCODE_CRSEL => CrSel, - sys::SDL_Scancode::SDL_SCANCODE_EXSEL => ExSel, - sys::SDL_Scancode::SDL_SCANCODE_KP_00 => Kp00, - sys::SDL_Scancode::SDL_SCANCODE_KP_000 => Kp000, - sys::SDL_Scancode::SDL_SCANCODE_THOUSANDSSEPARATOR => ThousandsSeparator, - sys::SDL_Scancode::SDL_SCANCODE_DECIMALSEPARATOR => DecimalSeparator, - sys::SDL_Scancode::SDL_SCANCODE_CURRENCYUNIT => CurrencyUnit, - sys::SDL_Scancode::SDL_SCANCODE_CURRENCYSUBUNIT => CurrencySubUnit, - sys::SDL_Scancode::SDL_SCANCODE_KP_LEFTPAREN => KpLeftParen, - sys::SDL_Scancode::SDL_SCANCODE_KP_RIGHTPAREN => KpRightParen, - sys::SDL_Scancode::SDL_SCANCODE_KP_LEFTBRACE => KpLeftBrace, - sys::SDL_Scancode::SDL_SCANCODE_KP_RIGHTBRACE => KpRightBrace, - sys::SDL_Scancode::SDL_SCANCODE_KP_TAB => KpTab, - sys::SDL_Scancode::SDL_SCANCODE_KP_BACKSPACE => KpBackspace, - sys::SDL_Scancode::SDL_SCANCODE_KP_A => KpA, - sys::SDL_Scancode::SDL_SCANCODE_KP_B => KpB, - sys::SDL_Scancode::SDL_SCANCODE_KP_C => KpC, - sys::SDL_Scancode::SDL_SCANCODE_KP_D => KpD, - sys::SDL_Scancode::SDL_SCANCODE_KP_E => KpE, - sys::SDL_Scancode::SDL_SCANCODE_KP_F => KpF, - sys::SDL_Scancode::SDL_SCANCODE_KP_XOR => KpXor, - sys::SDL_Scancode::SDL_SCANCODE_KP_POWER => KpPower, - sys::SDL_Scancode::SDL_SCANCODE_KP_PERCENT => KpPercent, - sys::SDL_Scancode::SDL_SCANCODE_KP_LESS => KpLess, - sys::SDL_Scancode::SDL_SCANCODE_KP_GREATER => KpGreater, - sys::SDL_Scancode::SDL_SCANCODE_KP_AMPERSAND => KpAmpersand, - sys::SDL_Scancode::SDL_SCANCODE_KP_DBLAMPERSAND => KpDblAmpersand, - sys::SDL_Scancode::SDL_SCANCODE_KP_VERTICALBAR => KpVerticalBar, - sys::SDL_Scancode::SDL_SCANCODE_KP_DBLVERTICALBAR => KpDblVerticalBar, - sys::SDL_Scancode::SDL_SCANCODE_KP_COLON => KpColon, - sys::SDL_Scancode::SDL_SCANCODE_KP_HASH => KpHash, - sys::SDL_Scancode::SDL_SCANCODE_KP_SPACE => KpSpace, - sys::SDL_Scancode::SDL_SCANCODE_KP_AT => KpAt, - sys::SDL_Scancode::SDL_SCANCODE_KP_EXCLAM => KpExclam, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMSTORE => KpMemStore, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMRECALL => KpMemRecall, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMCLEAR => KpMemClear, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMADD => KpMemAdd, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMSUBTRACT => KpMemSubtract, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMMULTIPLY => KpMemMultiply, - sys::SDL_Scancode::SDL_SCANCODE_KP_MEMDIVIDE => KpMemDivide, - sys::SDL_Scancode::SDL_SCANCODE_KP_PLUSMINUS => KpPlusMinus, - sys::SDL_Scancode::SDL_SCANCODE_KP_CLEAR => KpClear, - sys::SDL_Scancode::SDL_SCANCODE_KP_CLEARENTRY => KpClearEntry, - sys::SDL_Scancode::SDL_SCANCODE_KP_BINARY => KpBinary, - sys::SDL_Scancode::SDL_SCANCODE_KP_OCTAL => KpOctal, - sys::SDL_Scancode::SDL_SCANCODE_KP_DECIMAL => KpDecimal, - sys::SDL_Scancode::SDL_SCANCODE_KP_HEXADECIMAL => KpHexadecimal, - sys::SDL_Scancode::SDL_SCANCODE_LCTRL => LCtrl, - sys::SDL_Scancode::SDL_SCANCODE_LSHIFT => LShift, - sys::SDL_Scancode::SDL_SCANCODE_LALT => LAlt, - sys::SDL_Scancode::SDL_SCANCODE_LGUI => LGui, - sys::SDL_Scancode::SDL_SCANCODE_RCTRL => RCtrl, - sys::SDL_Scancode::SDL_SCANCODE_RSHIFT => RShift, - sys::SDL_Scancode::SDL_SCANCODE_RALT => RAlt, - sys::SDL_Scancode::SDL_SCANCODE_RGUI => RGui, - sys::SDL_Scancode::SDL_SCANCODE_MODE => Mode, - sys::SDL_Scancode::SDL_SCANCODE_AUDIONEXT => AudioNext, - sys::SDL_Scancode::SDL_SCANCODE_AUDIOPREV => AudioPrev, - sys::SDL_Scancode::SDL_SCANCODE_AUDIOSTOP => AudioStop, - sys::SDL_Scancode::SDL_SCANCODE_AUDIOPLAY => AudioPlay, - sys::SDL_Scancode::SDL_SCANCODE_AUDIOMUTE => AudioMute, - sys::SDL_Scancode::SDL_SCANCODE_MEDIASELECT => MediaSelect, - sys::SDL_Scancode::SDL_SCANCODE_WWW => Www, - sys::SDL_Scancode::SDL_SCANCODE_MAIL => Mail, - sys::SDL_Scancode::SDL_SCANCODE_CALCULATOR => Calculator, - sys::SDL_Scancode::SDL_SCANCODE_COMPUTER => Computer, - sys::SDL_Scancode::SDL_SCANCODE_AC_SEARCH => AcSearch, - sys::SDL_Scancode::SDL_SCANCODE_AC_HOME => AcHome, - sys::SDL_Scancode::SDL_SCANCODE_AC_BACK => AcBack, - sys::SDL_Scancode::SDL_SCANCODE_AC_FORWARD => AcForward, - sys::SDL_Scancode::SDL_SCANCODE_AC_STOP => AcStop, - sys::SDL_Scancode::SDL_SCANCODE_AC_REFRESH => AcRefresh, - sys::SDL_Scancode::SDL_SCANCODE_AC_BOOKMARKS => AcBookmarks, - sys::SDL_Scancode::SDL_SCANCODE_BRIGHTNESSDOWN => BrightnessDown, - sys::SDL_Scancode::SDL_SCANCODE_BRIGHTNESSUP => BrightnessUp, - sys::SDL_Scancode::SDL_SCANCODE_DISPLAYSWITCH => DisplaySwitch, - sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMTOGGLE => KbdIllumToggle, - sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMDOWN => KbdIllumDown, - sys::SDL_Scancode::SDL_SCANCODE_KBDILLUMUP => KbdIllumUp, - sys::SDL_Scancode::SDL_SCANCODE_EJECT => Eject, - sys::SDL_Scancode::SDL_SCANCODE_SLEEP => Sleep, - sys::SDL_Scancode::SDL_SCANCODE_APP1 => App1, - sys::SDL_Scancode::SDL_SCANCODE_APP2 => App2, - sys::SDL_Scancode::SDL_NUM_SCANCODES => Num, + Some( match unsafe { transmute::(n) } { + SDL_Scancode::SDL_SCANCODE_A => A, + SDL_Scancode::SDL_SCANCODE_B => B, + SDL_Scancode::SDL_SCANCODE_C => C, + SDL_Scancode::SDL_SCANCODE_D => D, + SDL_Scancode::SDL_SCANCODE_E => E, + SDL_Scancode::SDL_SCANCODE_F => F, + SDL_Scancode::SDL_SCANCODE_G => G, + SDL_Scancode::SDL_SCANCODE_H => H, + SDL_Scancode::SDL_SCANCODE_I => I, + SDL_Scancode::SDL_SCANCODE_J => J, + SDL_Scancode::SDL_SCANCODE_K => K, + SDL_Scancode::SDL_SCANCODE_L => L, + SDL_Scancode::SDL_SCANCODE_M => M, + SDL_Scancode::SDL_SCANCODE_N => N, + SDL_Scancode::SDL_SCANCODE_O => O, + SDL_Scancode::SDL_SCANCODE_P => P, + SDL_Scancode::SDL_SCANCODE_Q => Q, + SDL_Scancode::SDL_SCANCODE_R => R, + SDL_Scancode::SDL_SCANCODE_S => S, + SDL_Scancode::SDL_SCANCODE_T => T, + SDL_Scancode::SDL_SCANCODE_U => U, + SDL_Scancode::SDL_SCANCODE_V => V, + SDL_Scancode::SDL_SCANCODE_W => W, + SDL_Scancode::SDL_SCANCODE_X => X, + SDL_Scancode::SDL_SCANCODE_Y => Y, + SDL_Scancode::SDL_SCANCODE_Z => Z, + SDL_Scancode::SDL_SCANCODE_1 => Num1, + SDL_Scancode::SDL_SCANCODE_2 => Num2, + SDL_Scancode::SDL_SCANCODE_3 => Num3, + SDL_Scancode::SDL_SCANCODE_4 => Num4, + SDL_Scancode::SDL_SCANCODE_5 => Num5, + SDL_Scancode::SDL_SCANCODE_6 => Num6, + SDL_Scancode::SDL_SCANCODE_7 => Num7, + SDL_Scancode::SDL_SCANCODE_8 => Num8, + SDL_Scancode::SDL_SCANCODE_9 => Num9, + SDL_Scancode::SDL_SCANCODE_0 => Num0, + SDL_Scancode::SDL_SCANCODE_RETURN => Return, + SDL_Scancode::SDL_SCANCODE_ESCAPE => Escape, + SDL_Scancode::SDL_SCANCODE_BACKSPACE => Backspace, + SDL_Scancode::SDL_SCANCODE_TAB => Tab, + SDL_Scancode::SDL_SCANCODE_SPACE => Space, + SDL_Scancode::SDL_SCANCODE_MINUS => Minus, + SDL_Scancode::SDL_SCANCODE_EQUALS => Equals, + SDL_Scancode::SDL_SCANCODE_LEFTBRACKET => LeftBracket, + SDL_Scancode::SDL_SCANCODE_RIGHTBRACKET => RightBracket, + SDL_Scancode::SDL_SCANCODE_BACKSLASH => Backslash, + SDL_Scancode::SDL_SCANCODE_NONUSHASH => NonUsHash, + SDL_Scancode::SDL_SCANCODE_SEMICOLON => Semicolon, + SDL_Scancode::SDL_SCANCODE_APOSTROPHE => Apostrophe, + SDL_Scancode::SDL_SCANCODE_GRAVE => Grave, + SDL_Scancode::SDL_SCANCODE_COMMA => Comma, + SDL_Scancode::SDL_SCANCODE_PERIOD => Period, + SDL_Scancode::SDL_SCANCODE_SLASH => Slash, + SDL_Scancode::SDL_SCANCODE_CAPSLOCK => CapsLock, + SDL_Scancode::SDL_SCANCODE_F1 => F1, + SDL_Scancode::SDL_SCANCODE_F2 => F2, + SDL_Scancode::SDL_SCANCODE_F3 => F3, + SDL_Scancode::SDL_SCANCODE_F4 => F4, + SDL_Scancode::SDL_SCANCODE_F5 => F5, + SDL_Scancode::SDL_SCANCODE_F6 => F6, + SDL_Scancode::SDL_SCANCODE_F7 => F7, + SDL_Scancode::SDL_SCANCODE_F8 => F8, + SDL_Scancode::SDL_SCANCODE_F9 => F9, + SDL_Scancode::SDL_SCANCODE_F10 => F10, + SDL_Scancode::SDL_SCANCODE_F11 => F11, + SDL_Scancode::SDL_SCANCODE_F12 => F12, + SDL_Scancode::SDL_SCANCODE_PRINTSCREEN => PrintScreen, + SDL_Scancode::SDL_SCANCODE_SCROLLLOCK => ScrollLock, + SDL_Scancode::SDL_SCANCODE_PAUSE => Pause, + SDL_Scancode::SDL_SCANCODE_INSERT => Insert, + SDL_Scancode::SDL_SCANCODE_HOME => Home, + SDL_Scancode::SDL_SCANCODE_PAGEUP => PageUp, + SDL_Scancode::SDL_SCANCODE_DELETE => Delete, + SDL_Scancode::SDL_SCANCODE_END => End, + SDL_Scancode::SDL_SCANCODE_PAGEDOWN => PageDown, + SDL_Scancode::SDL_SCANCODE_RIGHT => Right, + SDL_Scancode::SDL_SCANCODE_LEFT => Left, + SDL_Scancode::SDL_SCANCODE_DOWN => Down, + SDL_Scancode::SDL_SCANCODE_UP => Up, + SDL_Scancode::SDL_SCANCODE_NUMLOCKCLEAR => NumLockClear, + SDL_Scancode::SDL_SCANCODE_KP_DIVIDE => KpDivide, + SDL_Scancode::SDL_SCANCODE_KP_MULTIPLY => KpMultiply, + SDL_Scancode::SDL_SCANCODE_KP_MINUS => KpMinus, + SDL_Scancode::SDL_SCANCODE_KP_PLUS => KpPlus, + SDL_Scancode::SDL_SCANCODE_KP_ENTER => KpEnter, + SDL_Scancode::SDL_SCANCODE_KP_1 => Kp1, + SDL_Scancode::SDL_SCANCODE_KP_2 => Kp2, + SDL_Scancode::SDL_SCANCODE_KP_3 => Kp3, + SDL_Scancode::SDL_SCANCODE_KP_4 => Kp4, + SDL_Scancode::SDL_SCANCODE_KP_5 => Kp5, + SDL_Scancode::SDL_SCANCODE_KP_6 => Kp6, + SDL_Scancode::SDL_SCANCODE_KP_7 => Kp7, + SDL_Scancode::SDL_SCANCODE_KP_8 => Kp8, + SDL_Scancode::SDL_SCANCODE_KP_9 => Kp9, + SDL_Scancode::SDL_SCANCODE_KP_0 => Kp0, + SDL_Scancode::SDL_SCANCODE_KP_PERIOD => KpPeriod, + SDL_Scancode::SDL_SCANCODE_NONUSBACKSLASH => NonUsBackslash, + SDL_Scancode::SDL_SCANCODE_APPLICATION => Application, + SDL_Scancode::SDL_SCANCODE_POWER => Power, + SDL_Scancode::SDL_SCANCODE_KP_EQUALS => KpEquals, + SDL_Scancode::SDL_SCANCODE_F13 => F13, + SDL_Scancode::SDL_SCANCODE_F14 => F14, + SDL_Scancode::SDL_SCANCODE_F15 => F15, + SDL_Scancode::SDL_SCANCODE_F16 => F16, + SDL_Scancode::SDL_SCANCODE_F17 => F17, + SDL_Scancode::SDL_SCANCODE_F18 => F18, + SDL_Scancode::SDL_SCANCODE_F19 => F19, + SDL_Scancode::SDL_SCANCODE_F20 => F20, + SDL_Scancode::SDL_SCANCODE_F21 => F21, + SDL_Scancode::SDL_SCANCODE_F22 => F22, + SDL_Scancode::SDL_SCANCODE_F23 => F23, + SDL_Scancode::SDL_SCANCODE_F24 => F24, + SDL_Scancode::SDL_SCANCODE_EXECUTE => Execute, + SDL_Scancode::SDL_SCANCODE_HELP => Help, + SDL_Scancode::SDL_SCANCODE_MENU => Menu, + SDL_Scancode::SDL_SCANCODE_SELECT => Select, + SDL_Scancode::SDL_SCANCODE_STOP => Stop, + SDL_Scancode::SDL_SCANCODE_AGAIN => Again, + SDL_Scancode::SDL_SCANCODE_UNDO => Undo, + SDL_Scancode::SDL_SCANCODE_CUT => Cut, + SDL_Scancode::SDL_SCANCODE_COPY => Copy, + SDL_Scancode::SDL_SCANCODE_PASTE => Paste, + SDL_Scancode::SDL_SCANCODE_FIND => Find, + SDL_Scancode::SDL_SCANCODE_MUTE => Mute, + SDL_Scancode::SDL_SCANCODE_VOLUMEUP => VolumeUp, + SDL_Scancode::SDL_SCANCODE_VOLUMEDOWN => VolumeDown, + SDL_Scancode::SDL_SCANCODE_KP_COMMA => KpComma, + SDL_Scancode::SDL_SCANCODE_KP_EQUALSAS400 => KpEqualsAS400, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL1 => International1, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL2 => International2, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL3 => International3, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL4 => International4, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL5 => International5, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL6 => International6, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL7 => International7, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL8 => International8, + SDL_Scancode::SDL_SCANCODE_INTERNATIONAL9 => International9, + SDL_Scancode::SDL_SCANCODE_LANG1 => Lang1, + SDL_Scancode::SDL_SCANCODE_LANG2 => Lang2, + SDL_Scancode::SDL_SCANCODE_LANG3 => Lang3, + SDL_Scancode::SDL_SCANCODE_LANG4 => Lang4, + SDL_Scancode::SDL_SCANCODE_LANG5 => Lang5, + SDL_Scancode::SDL_SCANCODE_LANG6 => Lang6, + SDL_Scancode::SDL_SCANCODE_LANG7 => Lang7, + SDL_Scancode::SDL_SCANCODE_LANG8 => Lang8, + SDL_Scancode::SDL_SCANCODE_LANG9 => Lang9, + SDL_Scancode::SDL_SCANCODE_ALTERASE => AltErase, + SDL_Scancode::SDL_SCANCODE_SYSREQ => SysReq, + SDL_Scancode::SDL_SCANCODE_CANCEL => Cancel, + SDL_Scancode::SDL_SCANCODE_CLEAR => Clear, + SDL_Scancode::SDL_SCANCODE_PRIOR => Prior, + SDL_Scancode::SDL_SCANCODE_RETURN2 => Return2, + SDL_Scancode::SDL_SCANCODE_SEPARATOR => Separator, + SDL_Scancode::SDL_SCANCODE_OUT => Out, + SDL_Scancode::SDL_SCANCODE_OPER => Oper, + SDL_Scancode::SDL_SCANCODE_CLEARAGAIN => ClearAgain, + SDL_Scancode::SDL_SCANCODE_CRSEL => CrSel, + SDL_Scancode::SDL_SCANCODE_EXSEL => ExSel, + SDL_Scancode::SDL_SCANCODE_KP_00 => Kp00, + SDL_Scancode::SDL_SCANCODE_KP_000 => Kp000, + SDL_Scancode::SDL_SCANCODE_THOUSANDSSEPARATOR => ThousandsSeparator, + SDL_Scancode::SDL_SCANCODE_DECIMALSEPARATOR => DecimalSeparator, + SDL_Scancode::SDL_SCANCODE_CURRENCYUNIT => CurrencyUnit, + SDL_Scancode::SDL_SCANCODE_CURRENCYSUBUNIT => CurrencySubUnit, + SDL_Scancode::SDL_SCANCODE_KP_LEFTPAREN => KpLeftParen, + SDL_Scancode::SDL_SCANCODE_KP_RIGHTPAREN => KpRightParen, + SDL_Scancode::SDL_SCANCODE_KP_LEFTBRACE => KpLeftBrace, + SDL_Scancode::SDL_SCANCODE_KP_RIGHTBRACE => KpRightBrace, + SDL_Scancode::SDL_SCANCODE_KP_TAB => KpTab, + SDL_Scancode::SDL_SCANCODE_KP_BACKSPACE => KpBackspace, + SDL_Scancode::SDL_SCANCODE_KP_A => KpA, + SDL_Scancode::SDL_SCANCODE_KP_B => KpB, + SDL_Scancode::SDL_SCANCODE_KP_C => KpC, + SDL_Scancode::SDL_SCANCODE_KP_D => KpD, + SDL_Scancode::SDL_SCANCODE_KP_E => KpE, + SDL_Scancode::SDL_SCANCODE_KP_F => KpF, + SDL_Scancode::SDL_SCANCODE_KP_XOR => KpXor, + SDL_Scancode::SDL_SCANCODE_KP_POWER => KpPower, + SDL_Scancode::SDL_SCANCODE_KP_PERCENT => KpPercent, + SDL_Scancode::SDL_SCANCODE_KP_LESS => KpLess, + SDL_Scancode::SDL_SCANCODE_KP_GREATER => KpGreater, + SDL_Scancode::SDL_SCANCODE_KP_AMPERSAND => KpAmpersand, + SDL_Scancode::SDL_SCANCODE_KP_DBLAMPERSAND => KpDblAmpersand, + SDL_Scancode::SDL_SCANCODE_KP_VERTICALBAR => KpVerticalBar, + SDL_Scancode::SDL_SCANCODE_KP_DBLVERTICALBAR => KpDblVerticalBar, + SDL_Scancode::SDL_SCANCODE_KP_COLON => KpColon, + SDL_Scancode::SDL_SCANCODE_KP_HASH => KpHash, + SDL_Scancode::SDL_SCANCODE_KP_SPACE => KpSpace, + SDL_Scancode::SDL_SCANCODE_KP_AT => KpAt, + SDL_Scancode::SDL_SCANCODE_KP_EXCLAM => KpExclam, + SDL_Scancode::SDL_SCANCODE_KP_MEMSTORE => KpMemStore, + SDL_Scancode::SDL_SCANCODE_KP_MEMRECALL => KpMemRecall, + SDL_Scancode::SDL_SCANCODE_KP_MEMCLEAR => KpMemClear, + SDL_Scancode::SDL_SCANCODE_KP_MEMADD => KpMemAdd, + SDL_Scancode::SDL_SCANCODE_KP_MEMSUBTRACT => KpMemSubtract, + SDL_Scancode::SDL_SCANCODE_KP_MEMMULTIPLY => KpMemMultiply, + SDL_Scancode::SDL_SCANCODE_KP_MEMDIVIDE => KpMemDivide, + SDL_Scancode::SDL_SCANCODE_KP_PLUSMINUS => KpPlusMinus, + SDL_Scancode::SDL_SCANCODE_KP_CLEAR => KpClear, + SDL_Scancode::SDL_SCANCODE_KP_CLEARENTRY => KpClearEntry, + SDL_Scancode::SDL_SCANCODE_KP_BINARY => KpBinary, + SDL_Scancode::SDL_SCANCODE_KP_OCTAL => KpOctal, + SDL_Scancode::SDL_SCANCODE_KP_DECIMAL => KpDecimal, + SDL_Scancode::SDL_SCANCODE_KP_HEXADECIMAL => KpHexadecimal, + SDL_Scancode::SDL_SCANCODE_LCTRL => LCtrl, + SDL_Scancode::SDL_SCANCODE_LSHIFT => LShift, + SDL_Scancode::SDL_SCANCODE_LALT => LAlt, + SDL_Scancode::SDL_SCANCODE_LGUI => LGui, + SDL_Scancode::SDL_SCANCODE_RCTRL => RCtrl, + SDL_Scancode::SDL_SCANCODE_RSHIFT => RShift, + SDL_Scancode::SDL_SCANCODE_RALT => RAlt, + SDL_Scancode::SDL_SCANCODE_RGUI => RGui, + SDL_Scancode::SDL_SCANCODE_MODE => Mode, + SDL_Scancode::SDL_SCANCODE_AUDIONEXT => AudioNext, + SDL_Scancode::SDL_SCANCODE_AUDIOPREV => AudioPrev, + SDL_Scancode::SDL_SCANCODE_AUDIOSTOP => AudioStop, + SDL_Scancode::SDL_SCANCODE_AUDIOPLAY => AudioPlay, + SDL_Scancode::SDL_SCANCODE_AUDIOMUTE => AudioMute, + SDL_Scancode::SDL_SCANCODE_MEDIASELECT => MediaSelect, + SDL_Scancode::SDL_SCANCODE_WWW => Www, + SDL_Scancode::SDL_SCANCODE_MAIL => Mail, + SDL_Scancode::SDL_SCANCODE_CALCULATOR => Calculator, + SDL_Scancode::SDL_SCANCODE_COMPUTER => Computer, + SDL_Scancode::SDL_SCANCODE_AC_SEARCH => AcSearch, + SDL_Scancode::SDL_SCANCODE_AC_HOME => AcHome, + SDL_Scancode::SDL_SCANCODE_AC_BACK => AcBack, + SDL_Scancode::SDL_SCANCODE_AC_FORWARD => AcForward, + SDL_Scancode::SDL_SCANCODE_AC_STOP => AcStop, + SDL_Scancode::SDL_SCANCODE_AC_REFRESH => AcRefresh, + SDL_Scancode::SDL_SCANCODE_AC_BOOKMARKS => AcBookmarks, + SDL_Scancode::SDL_SCANCODE_BRIGHTNESSDOWN => BrightnessDown, + SDL_Scancode::SDL_SCANCODE_BRIGHTNESSUP => BrightnessUp, + SDL_Scancode::SDL_SCANCODE_DISPLAYSWITCH => DisplaySwitch, + SDL_Scancode::SDL_SCANCODE_KBDILLUMTOGGLE => KbdIllumToggle, + SDL_Scancode::SDL_SCANCODE_KBDILLUMDOWN => KbdIllumDown, + SDL_Scancode::SDL_SCANCODE_KBDILLUMUP => KbdIllumUp, + SDL_Scancode::SDL_SCANCODE_EJECT => Eject, + SDL_Scancode::SDL_SCANCODE_SLEEP => Sleep, + SDL_Scancode::SDL_SCANCODE_APP1 => App1, + SDL_Scancode::SDL_SCANCODE_APP2 => App2, + SDL_Scancode::SDL_NUM_SCANCODES => Num, _ => return None, }) } @@ -519,7 +520,7 @@ impl Scancode { pub fn from_keycode(keycode: Keycode) -> Option { unsafe { match sys::SDL_GetScancodeFromKey(keycode as i32) { - sys::SDL_Scancode::SDL_SCANCODE_UNKNOWN => None, + SDL_Scancode::SDL_SCANCODE_UNKNOWN => None, scancode_id => Scancode::from_i32(scancode_id as i32) } } @@ -529,7 +530,7 @@ impl Scancode { unsafe { match CString::new(name) { Ok(name) => match sys::SDL_GetScancodeFromName(name.as_ptr() as *const c_char) { - sys::SDL_Scancode::SDL_SCANCODE_UNKNOWN => None, + SDL_Scancode::SDL_SCANCODE_UNKNOWN => None, scancode_id => Some(Scancode::from_i32(scancode_id as i32).unwrap()) }, // string contains a nul byte - it won't match anything. @@ -542,7 +543,7 @@ impl Scancode { // The name string pointer lives in static, read-only memory. // Knowing this, we can always return a string slice. unsafe { - let buf = sys::SDL_GetScancodeName(transmute::(self as u32)); + let buf = sys::SDL_GetScancodeName(transmute::(self as u32)); ::std::str::from_utf8(CStr::from_ptr(buf as *const _).to_bytes()).unwrap() } } diff --git a/src/sdl2/mixer/mod.rs b/src/sdl2/mixer/mod.rs index 4b3773ba..c704f41e 100644 --- a/src/sdl2/mixer/mod.rs +++ b/src/sdl2/mixer/mod.rs @@ -33,6 +33,7 @@ use ::get_error; use ::rwops::RWops; use ::version::Version; use sys; +use sys::mixer; // This comes from SDL_audio.h #[allow(non_camel_case_types)] @@ -92,16 +93,16 @@ pub const MAX_VOLUME: i32 = 128; /// Returns the version of the dynamically linked `SDL_mixer` library pub fn get_linked_version() -> Version { - unsafe { Version::from_ll(*sys::mixer::Mix_Linked_Version()) } + unsafe { Version::from_ll(*mixer::Mix_Linked_Version()) } } bitflags!( pub struct InitFlag : u32 { - const FLAC = sys::mixer::MIX_InitFlags_MIX_INIT_FLAC as u32; - const MOD = sys::mixer::MIX_InitFlags_MIX_INIT_MOD as u32; - const MP3 = sys::mixer::MIX_InitFlags_MIX_INIT_MP3 as u32; - const OGG = sys::mixer::MIX_InitFlags_MIX_INIT_OGG as u32; - const MID = sys::mixer::MIX_InitFlags_MIX_INIT_MID as u32; + const FLAC = mixer::MIX_InitFlags_MIX_INIT_FLAC as u32; + const MOD = mixer::MIX_InitFlags_MIX_INIT_MOD as u32; + const MP3 = mixer::MIX_InitFlags_MIX_INIT_MP3 as u32; + const OGG = mixer::MIX_InitFlags_MIX_INIT_OGG as u32; + const MID = mixer::MIX_InitFlags_MIX_INIT_MID as u32; } ); @@ -134,7 +135,7 @@ pub struct Sdl2MixerContext; impl Drop for Sdl2MixerContext { fn drop(&mut self) { unsafe { - sys::mixer::Mix_Quit(); + mixer::Mix_Quit(); } } } @@ -143,7 +144,7 @@ impl Drop for Sdl2MixerContext { /// one or more flags from `InitFlag`. pub fn init(flags: InitFlag) -> Result { let return_flags = unsafe { - let ret = sys::mixer::Mix_Init(flags.bits() as c_int); + let ret = mixer::Mix_Init(flags.bits() as c_int); InitFlag::from_bits_truncate(ret as u32) }; // Check if all init flags were set @@ -175,7 +176,7 @@ pub fn open_audio(frequency: i32, chunksize: i32) -> Result<(), String> { let ret = unsafe { - sys::mixer::Mix_OpenAudio(frequency as c_int, + mixer::Mix_OpenAudio(frequency as c_int, format, channels as c_int, chunksize as c_int) @@ -189,7 +190,7 @@ pub fn open_audio(frequency: i32, /// Shutdown and cleanup the mixer API. pub fn close_audio() { - unsafe { sys::mixer::Mix_CloseAudio() } + unsafe { mixer::Mix_CloseAudio() } } /// Get the actual audio format in use by the opened audio device. @@ -197,7 +198,7 @@ pub fn query_spec() -> Result<(i32, AudioFormat, i32), String> { let mut frequency: c_int = 0; let mut format: uint16_t = 0; let mut channels: c_int = 0; - let ret = unsafe { sys::mixer::Mix_QuerySpec(&mut frequency, &mut format, &mut channels) }; + let ret = unsafe { mixer::Mix_QuerySpec(&mut frequency, &mut format, &mut channels) }; if ret == 0 { Err(get_error()) } else { @@ -209,13 +210,13 @@ pub fn query_spec() -> Result<(i32, AudioFormat, i32), String> { /// Get the number of sample chunk decoders available from the `Mix_GetChunkDecoder` function. pub fn get_chunk_decoders_number() -> i32 { - unsafe { sys::mixer::Mix_GetNumChunkDecoders() as i32 } + unsafe { mixer::Mix_GetNumChunkDecoders() as i32 } } /// Get the name of the indexed sample chunk decoder. pub fn get_chunk_decoder(index: i32) -> String { unsafe { - let name = sys::mixer::Mix_GetChunkDecoder(index as c_int); + let name = mixer::Mix_GetChunkDecoder(index as c_int); from_utf8(CStr::from_ptr(name).to_bytes()).unwrap().to_owned() } } @@ -223,14 +224,14 @@ pub fn get_chunk_decoder(index: i32) -> String { /// The internal format for an audio chunk. #[derive(PartialEq)] pub struct Chunk { - pub raw: *mut sys::mixer::Mix_Chunk, + pub raw: *mut mixer::Mix_Chunk, pub owned: bool, } impl Drop for Chunk { fn drop(&mut self) { if self.owned { - unsafe { sys::mixer::Mix_FreeChunk(self.raw) } + unsafe { mixer::Mix_FreeChunk(self.raw) } } } } @@ -238,7 +239,7 @@ impl Drop for Chunk { impl Chunk { /// Load file for use as a sample. pub fn from_file>(path: P) -> Result { - let raw = unsafe { sys::mixer::Mix_LoadWAV_RW(try!(RWops::from_file(path, "rb")).raw(), 0) }; + let raw = unsafe { mixer::Mix_LoadWAV_RW(try!(RWops::from_file(path, "rb")).raw(), 0) }; if raw.is_null() { Err(get_error()) } else { @@ -251,12 +252,12 @@ impl Chunk { /// Set chunk->volume to volume. pub fn set_volume(&mut self, volume: i32) -> i32 { - unsafe { sys::mixer::Mix_VolumeChunk(self.raw, volume as c_int) as i32 } + unsafe { mixer::Mix_VolumeChunk(self.raw, volume as c_int) as i32 } } /// current volume for the chunk. pub fn get_volume(&self) -> i32 { - unsafe { sys::mixer::Mix_VolumeChunk(self.raw, -1) as i32 } + unsafe { mixer::Mix_VolumeChunk(self.raw, -1) as i32 } } } @@ -271,7 +272,7 @@ pub trait LoaderRWops<'a> { impl<'a> LoaderRWops<'a> for RWops<'a> { /// Load src for use as a sample. fn load_wav(&self) -> Result { - let raw = unsafe { sys::mixer::Mix_LoadWAV_RW(self.raw(), 0) }; + let raw = unsafe { mixer::Mix_LoadWAV_RW(self.raw(), 0) }; if raw.is_null() { Err(get_error()) } else { @@ -284,7 +285,7 @@ impl<'a> LoaderRWops<'a> for RWops<'a> { /// Load src for use as music. fn load_music(&self) -> Result, String> { - let raw = unsafe { sys::mixer::Mix_LoadMUS_RW(self.raw(), 0) }; + let raw = unsafe { mixer::Mix_LoadMUS_RW(self.raw(), 0) }; if raw.is_null() { Err(get_error()) } else { @@ -305,9 +306,9 @@ impl<'a> LoaderRWops<'a> for RWops<'a> { #[repr(i32)] #[derive(Debug, Copy, Clone, PartialEq, Hash)] pub enum Fading { - NoFading = sys::mixer::Mix_Fading_MIX_NO_FADING as i32, - FadingOut = sys::mixer::Mix_Fading_MIX_FADING_OUT as i32, - FadingIn = sys::mixer::Mix_Fading_MIX_FADING_IN as i32, + NoFading = mixer::Mix_Fading_MIX_NO_FADING as i32, + FadingOut = mixer::Mix_Fading_MIX_FADING_OUT as i32, + FadingIn = mixer::Mix_Fading_MIX_FADING_IN as i32, } /// Sound effect channel. @@ -322,7 +323,7 @@ pub fn channel(chan: i32) -> Channel { /// Set the number of channels being mixed. pub fn allocate_channels(numchans: i32) -> i32 { - unsafe { sys::mixer::Mix_AllocateChannels(numchans as c_int) as i32 } + unsafe { mixer::Mix_AllocateChannels(numchans as c_int) as i32 } } static mut CHANNEL_FINISHED_CALLBACK: Option = None; @@ -340,7 +341,7 @@ extern "C" fn c_channel_finished_callback(ch: c_int) { pub fn set_channel_finished(f: fn(Channel)) { unsafe { CHANNEL_FINISHED_CALLBACK = Some(f); - sys::mixer::Mix_ChannelFinished(Some(c_channel_finished_callback as extern "C" fn(ch: c_int))); + mixer::Mix_ChannelFinished(Some(c_channel_finished_callback as extern "C" fn(ch: c_int))); } } @@ -348,7 +349,7 @@ pub fn set_channel_finished(f: fn(Channel)) { /// halted. pub fn unset_channel_finished() { unsafe { - sys::mixer::Mix_ChannelFinished(None); + mixer::Mix_ChannelFinished(None); CHANNEL_FINISHED_CALLBACK = None; } } @@ -367,13 +368,13 @@ impl Channel { /// Set the volume for any allocated channel. pub fn set_volume(self, volume: i32) -> i32 { let Channel(ch) = self; - unsafe { sys::mixer::Mix_Volume(ch as c_int, volume as c_int) as i32 } + unsafe { mixer::Mix_Volume(ch as c_int, volume as c_int) as i32 } } /// Returns the channels volume on scale of 0 to 128. pub fn get_volume(self) -> i32 { let Channel(ch) = self; - unsafe { sys::mixer::Mix_Volume(ch as c_int, -1) as i32 } + unsafe { mixer::Mix_Volume(ch as c_int, -1) as i32 } } /// Play chunk on channel, or if channel is -1, pick the first free unreserved channel. @@ -384,7 +385,7 @@ impl Channel { pub fn play_timed(self, chunk: &Chunk, loops: i32, ticks: i32) -> Result { let Channel(ch) = self; let ret = unsafe { - sys::mixer::Mix_PlayChannelTimed(ch as c_int, chunk.raw, loops as c_int, ticks as c_int) + mixer::Mix_PlayChannelTimed(ch as c_int, chunk.raw, loops as c_int, ticks as c_int) }; if ret == -1 { Err(get_error()) @@ -406,7 +407,7 @@ impl Channel { -> Result { let Channel(ch) = self; let ret = unsafe { - sys::mixer::Mix_FadeInChannelTimed(ch as c_int, + mixer::Mix_FadeInChannelTimed(ch as c_int, chunk.raw, loops as c_int, ms as c_int, @@ -423,7 +424,7 @@ impl Channel { pub fn pause(self) { let Channel(ch) = self; unsafe { - sys::mixer::Mix_Pause(ch as c_int); + mixer::Mix_Pause(ch as c_int); } } @@ -431,7 +432,7 @@ impl Channel { pub fn resume(self) { let Channel(ch) = self; unsafe { - sys::mixer::Mix_Resume(ch as c_int); + mixer::Mix_Resume(ch as c_int); } } @@ -439,49 +440,49 @@ impl Channel { pub fn halt(self) { let Channel(ch) = self; unsafe { - sys::mixer::Mix_HaltChannel(ch as c_int); + mixer::Mix_HaltChannel(ch as c_int); } } /// Halt channel playback, after ticks milliseconds. pub fn expire(self, ticks: i32) -> i32 { let Channel(ch) = self; - unsafe { sys::mixer::Mix_ExpireChannel(ch as c_int, ticks as c_int) as i32 } + unsafe { mixer::Mix_ExpireChannel(ch as c_int, ticks as c_int) as i32 } } /// Gradually fade out which channel over ms milliseconds starting from now. pub fn fade_out(self, ms: i32) -> i32 { let Channel(ch) = self; - unsafe { sys::mixer::Mix_FadeOutChannel(ch as c_int, ms as c_int) as i32 } + unsafe { mixer::Mix_FadeOutChannel(ch as c_int, ms as c_int) as i32 } } /// if channel is playing, or not. pub fn is_playing(self) -> bool { let Channel(ch) = self; - unsafe { sys::mixer::Mix_Playing(ch as c_int) != 0 } + unsafe { mixer::Mix_Playing(ch as c_int) != 0 } } /// if channel is paused, or not. pub fn is_paused(self) -> bool { let Channel(ch) = self; - unsafe { sys::mixer::Mix_Paused(ch as c_int) != 0 } + unsafe { mixer::Mix_Paused(ch as c_int) != 0 } } /// if channel is fading in, out, or not pub fn get_fading(self) -> Fading { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_FadingChannel(ch as c_int) as c_uint }; + let ret = unsafe { mixer::Mix_FadingChannel(ch as c_int) as c_uint }; match ret { - sys::mixer::Mix_Fading_MIX_FADING_OUT => Fading::FadingOut, - sys::mixer::Mix_Fading_MIX_FADING_IN => Fading::FadingIn, - sys::mixer::Mix_Fading_MIX_NO_FADING | _ => Fading::NoFading + mixer::Mix_Fading_MIX_FADING_OUT => Fading::FadingOut, + mixer::Mix_Fading_MIX_FADING_IN => Fading::FadingIn, + mixer::Mix_Fading_MIX_NO_FADING | _ => Fading::NoFading } } /// Get the most recent sample chunk pointer played on channel. pub fn get_chunk(self) -> Option { let Channel(ch) = self; - let raw = unsafe { sys::mixer::Mix_GetChunk(ch as c_int) }; + let raw = unsafe { mixer::Mix_GetChunk(ch as c_int) }; if raw.is_null() { None } else { @@ -495,7 +496,7 @@ impl Channel { /// This removes all effects registered to channel. pub fn unregister_all_effects(self) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_UnregisterAllEffects(ch as c_int) }; + let ret = unsafe { mixer::Mix_UnregisterAllEffects(ch as c_int) }; if ret == 0 { Err(get_error()) } else { @@ -507,7 +508,7 @@ impl Channel { /// They range from 0 (silence) to 255 (loud). pub fn set_panning(self, left: u8, right: u8) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetPanning(ch as c_int, left, right) }; + let ret = unsafe { mixer::Mix_SetPanning(ch as c_int, left, right) }; if ret == 0 { Err(get_error()) } else { @@ -518,7 +519,7 @@ impl Channel { /// Unregisters panning effect. pub fn unset_panning(self) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetPanning(ch as c_int, 255, 255) }; + let ret = unsafe { mixer::Mix_SetPanning(ch as c_int, 255, 255) }; if ret == 0 { Err(get_error()) } else { @@ -530,7 +531,7 @@ impl Channel { /// distance ranges from 0 (close/loud) to 255 (far/quiet). pub fn set_distance(self, distance: u8) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetDistance(ch as c_int, distance) }; + let ret = unsafe { mixer::Mix_SetDistance(ch as c_int, distance) }; if ret == 0 { Err(get_error()) } else { @@ -541,7 +542,7 @@ impl Channel { /// Unregisters distance effect. pub fn unset_distance(self) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetDistance(ch as c_int, 0) }; + let ret = unsafe { mixer::Mix_SetDistance(ch as c_int, 0) }; if ret == 0 { Err(get_error()) } else { @@ -554,7 +555,7 @@ impl Channel { /// distance ranges from 0 (close/loud) to 255 (far/quiet). pub fn set_position(self, angle: i16, distance: u8) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetPosition(ch as c_int, angle, distance) }; + let ret = unsafe { mixer::Mix_SetPosition(ch as c_int, angle, distance) }; if ret == 0 { Err(get_error()) } else { @@ -565,7 +566,7 @@ impl Channel { /// Unregisters position effect. pub fn unset_position(self) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetPosition(ch as c_int, 0, 0) }; + let ret = unsafe { mixer::Mix_SetPosition(ch as c_int, 0, 0) }; if ret == 0 { Err(get_error()) } else { @@ -577,7 +578,7 @@ impl Channel { /// true for reverse, false to unregister effect. pub fn set_reverse_stereo(self, flip: bool) -> Result<(), String> { let Channel(ch) = self; - let ret = unsafe { sys::mixer::Mix_SetReverseStereo(ch as c_int, flip as c_int) }; + let ret = unsafe { mixer::Mix_SetReverseStereo(ch as c_int, flip as c_int) }; if ret == 0 { Err(get_error()) } else { @@ -588,12 +589,12 @@ impl Channel { /// Returns how many channels are currently playing. pub fn get_playing_channels_number() -> i32 { - unsafe { sys::mixer::Mix_Playing(-1) as i32 } + unsafe { mixer::Mix_Playing(-1) as i32 } } /// Returns how many channels are currently paused. pub fn get_paused_channels_number() -> i32 { - unsafe { sys::mixer::Mix_Paused(-1) as i32 } + unsafe { mixer::Mix_Paused(-1) as i32 } } // 4.4 Groups @@ -601,7 +602,7 @@ pub fn get_paused_channels_number() -> i32 { /// Reserve num channels from being used when playing samples when /// passing in -1 as a channel number to playback functions. pub fn reserve_channels(num: i32) -> i32 { - unsafe { sys::mixer::Mix_ReserveChannels(num as c_int) as i32 } + unsafe { mixer::Mix_ReserveChannels(num as c_int) as i32 } } /// Sound effect channel grouping. @@ -619,25 +620,25 @@ impl Group { /// or reset it's group to the default group tag (-1). pub fn add_channels_range(self, from: i32, to: i32) -> i32 { let Group(g) = self; - unsafe { sys::mixer::Mix_GroupChannels(from as c_int, to as c_int, g as c_int) as i32 } + unsafe { mixer::Mix_GroupChannels(from as c_int, to as c_int, g as c_int) as i32 } } /// Add which channel to group tag, or reset it's group to the default group tag pub fn add_channel(self, Channel(ch): Channel) -> bool { let Group(g) = self; - unsafe { sys::mixer::Mix_GroupChannel(ch as c_int, g as c_int) == 1 } + unsafe { mixer::Mix_GroupChannel(ch as c_int, g as c_int) == 1 } } /// Count the number of channels in group pub fn count(self) -> i32 { let Group(g) = self; - unsafe { sys::mixer::Mix_GroupCount(g as c_int) as i32 } + unsafe { mixer::Mix_GroupCount(g as c_int) as i32 } } /// Find the first available (not playing) channel in group pub fn find_available(self) -> Option { let Group(g) = self; - let ret = unsafe { sys::mixer::Mix_GroupAvailable(g as c_int) as i32 }; + let ret = unsafe { mixer::Mix_GroupAvailable(g as c_int) as i32 }; if ret == -1 { None } else { @@ -648,7 +649,7 @@ impl Group { /// Find the oldest actively playing channel in group pub fn find_oldest(self) -> Option { let Group(g) = self; - let ret = unsafe { sys::mixer::Mix_GroupOldest(g as c_int) as i32 }; + let ret = unsafe { mixer::Mix_GroupOldest(g as c_int) as i32 }; if ret == -1 { None } else { @@ -659,7 +660,7 @@ impl Group { /// Find the newest, most recently started, actively playing channel in group. pub fn find_newest(self) -> Option { let Group(g) = self; - let ret = unsafe { sys::mixer::Mix_GroupNewer(g as c_int) as i32 }; + let ret = unsafe { mixer::Mix_GroupNewer(g as c_int) as i32 }; if ret == -1 { None } else { @@ -671,14 +672,14 @@ impl Group { /// Returns the number of channels set to fade out. pub fn fade_out(self, ms: i32) -> i32 { let Group(g) = self; - unsafe { sys::mixer::Mix_FadeOutGroup(g as c_int, ms as c_int) as i32 } + unsafe { mixer::Mix_FadeOutGroup(g as c_int, ms as c_int) as i32 } } /// Halt playback on all channels in group. pub fn halt(self) { let Group(g) = self; unsafe { - sys::mixer::Mix_HaltGroup(g as c_int); + mixer::Mix_HaltGroup(g as c_int); } } } @@ -687,13 +688,13 @@ impl Group { /// Get the number of music decoders available. pub fn get_music_decoders_number() -> i32 { - unsafe { sys::mixer::Mix_GetNumMusicDecoders() as i32 } + unsafe { mixer::Mix_GetNumMusicDecoders() as i32 } } /// Get the name of the indexed music decoder. pub fn get_music_decoder(index: i32) -> String { unsafe { - let name = sys::mixer::Mix_GetMusicDecoder(index as c_int); + let name = mixer::Mix_GetMusicDecoder(index as c_int); from_utf8(CStr::from_ptr(name).to_bytes()).unwrap().to_owned() } } @@ -702,16 +703,16 @@ pub fn get_music_decoder(index: i32) -> String { #[repr(i32)] #[derive(Copy, Clone, PartialEq, Hash, Debug)] pub enum MusicType { - MusicNone = sys::mixer::Mix_MusicType_MUS_NONE as i32, - MusicCmd = sys::mixer::Mix_MusicType_MUS_CMD as i32, - MusicWav = sys::mixer::Mix_MusicType_MUS_WAV as i32, - MusicMod = sys::mixer::Mix_MusicType_MUS_MOD as i32, - MusicMid = sys::mixer::Mix_MusicType_MUS_MID as i32, - MusicOgg = sys::mixer::Mix_MusicType_MUS_OGG as i32, - MusicMp3 = sys::mixer::Mix_MusicType_MUS_MP3 as i32, - MusicMp3Mad = sys::mixer::Mix_MusicType_MUS_MP3_MAD_UNUSED as i32, - MusicFlac = sys::mixer::Mix_MusicType_MUS_FLAC as i32, - MusicModPlug = sys::mixer::Mix_MusicType_MUS_MODPLUG_UNUSED as i32, + MusicNone = mixer::Mix_MusicType_MUS_NONE as i32, + MusicCmd = mixer::Mix_MusicType_MUS_CMD as i32, + MusicWav = mixer::Mix_MusicType_MUS_WAV as i32, + MusicMod = mixer::Mix_MusicType_MUS_MOD as i32, + MusicMid = mixer::Mix_MusicType_MUS_MID as i32, + MusicOgg = mixer::Mix_MusicType_MUS_OGG as i32, + MusicMp3 = mixer::Mix_MusicType_MUS_MP3 as i32, + MusicMp3Mad = mixer::Mix_MusicType_MUS_MP3_MAD_UNUSED as i32, + MusicFlac = mixer::Mix_MusicType_MUS_FLAC as i32, + MusicModPlug = mixer::Mix_MusicType_MUS_MODPLUG_UNUSED as i32, } // hooks @@ -729,7 +730,7 @@ extern "C" fn c_music_finished_hook() { /// This is an opaque data type used for Music data. #[derive(PartialEq)] pub struct Music<'a> { - pub raw: *mut sys::mixer::Mix_Music, + pub raw: *mut mixer::Mix_Music, pub owned: bool, _marker: PhantomData<&'a ()> } @@ -737,7 +738,7 @@ pub struct Music<'a> { impl<'a> Drop for Music<'a> { fn drop(&mut self) { if self.owned { - unsafe { sys::mixer::Mix_FreeMusic(self.raw) }; + unsafe { mixer::Mix_FreeMusic(self.raw) }; } } } @@ -754,7 +755,7 @@ impl<'a> Music<'a> { pub fn from_file>(path: P) -> Result, String> { let raw = unsafe { let c_path = CString::new(path.as_ref().to_str().unwrap()).unwrap(); - sys::mixer::Mix_LoadMUS(c_path.as_ptr()) + mixer::Mix_LoadMUS(c_path.as_ptr()) }; if raw.is_null() { Err(get_error()) @@ -777,7 +778,7 @@ impl<'a> Music<'a> { return Err(get_error()); } - let raw = unsafe { sys::mixer::Mix_LoadMUS_RW(rw, 0) }; + let raw = unsafe { mixer::Mix_LoadMUS_RW(rw, 0) }; if raw.is_null() { Err(get_error()) } else { @@ -791,24 +792,24 @@ impl<'a> Music<'a> { /// The file format encoding of the music. pub fn get_type(&self) -> MusicType { - let ret = unsafe { sys::mixer::Mix_GetMusicType(self.raw) as i32 } as c_uint; + let ret = unsafe { mixer::Mix_GetMusicType(self.raw) as i32 } as c_uint; match ret { - sys::mixer::Mix_MusicType_MUS_CMD => MusicType::MusicCmd, - sys::mixer::Mix_MusicType_MUS_WAV => MusicType::MusicWav, - sys::mixer::Mix_MusicType_MUS_MOD => MusicType::MusicMod, - sys::mixer::Mix_MusicType_MUS_MID => MusicType::MusicMid, - sys::mixer::Mix_MusicType_MUS_OGG => MusicType::MusicOgg, - sys::mixer::Mix_MusicType_MUS_MP3 => MusicType::MusicMp3, - sys::mixer::Mix_MusicType_MUS_MP3_MAD_UNUSED => MusicType::MusicMp3Mad, - sys::mixer::Mix_MusicType_MUS_FLAC => MusicType::MusicFlac, - sys::mixer::Mix_MusicType_MUS_MODPLUG_UNUSED => MusicType::MusicModPlug, - sys::mixer::Mix_MusicType_MUS_NONE | _ => MusicType::MusicNone + mixer::Mix_MusicType_MUS_CMD => MusicType::MusicCmd, + mixer::Mix_MusicType_MUS_WAV => MusicType::MusicWav, + mixer::Mix_MusicType_MUS_MOD => MusicType::MusicMod, + mixer::Mix_MusicType_MUS_MID => MusicType::MusicMid, + mixer::Mix_MusicType_MUS_OGG => MusicType::MusicOgg, + mixer::Mix_MusicType_MUS_MP3 => MusicType::MusicMp3, + mixer::Mix_MusicType_MUS_MP3_MAD_UNUSED => MusicType::MusicMp3Mad, + mixer::Mix_MusicType_MUS_FLAC => MusicType::MusicFlac, + mixer::Mix_MusicType_MUS_MODPLUG_UNUSED => MusicType::MusicModPlug, + mixer::Mix_MusicType_MUS_NONE | _ => MusicType::MusicNone } } - /// Play the loaded music loop times through from start to finish. + /// Play the loaded music loop times through from start to finish. Pass -1 to loop forever. pub fn play(&self, loops: i32) -> Result<(), String> { - let ret = unsafe { sys::mixer::Mix_PlayMusic(self.raw, loops as c_int) }; + let ret = unsafe { mixer::Mix_PlayMusic(self.raw, loops as c_int) }; if ret == -1 { Err(get_error()) } else { @@ -819,7 +820,7 @@ impl<'a> Music<'a> { /// Fade in over ms milliseconds of time, the loaded music, /// playing it loop times through from start to finish. pub fn fade_in(&self, loops: i32, ms: i32) -> Result<(), String> { - let ret = unsafe { sys::mixer::Mix_FadeInMusic(self.raw, loops as c_int, ms as c_int) }; + let ret = unsafe { mixer::Mix_FadeInMusic(self.raw, loops as c_int, ms as c_int) }; if ret == -1 { Err(get_error()) } else { @@ -830,7 +831,7 @@ impl<'a> Music<'a> { /// Fade in over ms milliseconds of time, from position. pub fn fade_in_from_pos(&self, loops: i32, ms: i32, position: f64) -> Result<(), String> { let ret = unsafe { - sys::mixer::Mix_FadeInMusicPos(self.raw, loops as c_int, ms as c_int, position as c_double) + mixer::Mix_FadeInMusicPos(self.raw, loops as c_int, ms as c_int, position as c_double) }; if ret == -1 { Err(get_error()) @@ -842,40 +843,40 @@ impl<'a> Music<'a> { // FIXME: make these class method? /// Returns current volume pub fn get_volume() -> i32 { - unsafe { sys::mixer::Mix_VolumeMusic(-1) as i32 } + unsafe { mixer::Mix_VolumeMusic(-1) as i32 } } /// Set the volume on a scale of 0 to 128. /// Values greater than 128 will use 128. pub fn set_volume(volume: i32) { // This shouldn't return anything. Use get_volume instead - let _ = unsafe { sys::mixer::Mix_VolumeMusic(volume as c_int) as i32 }; + let _ = unsafe { mixer::Mix_VolumeMusic(volume as c_int) as i32 }; } /// Pause the music playback. pub fn pause() { unsafe { - sys::mixer::Mix_PauseMusic(); + mixer::Mix_PauseMusic(); } } /// Unpause the music. pub fn resume() { unsafe { - sys::mixer::Mix_ResumeMusic(); + mixer::Mix_ResumeMusic(); } } /// Rewind the music to the start. pub fn rewind() { unsafe { - sys::mixer::Mix_RewindMusic(); + mixer::Mix_RewindMusic(); } } /// Set the position of the currently playing music. pub fn set_pos(position: f64) -> Result<(), String> { - let ret = unsafe { sys::mixer::Mix_SetMusicPosition(position as c_double) }; + let ret = unsafe { mixer::Mix_SetMusicPosition(position as c_double) }; if ret == -1 { Err(get_error()) } else { @@ -887,7 +888,7 @@ impl<'a> Music<'a> { pub fn set_command(command: &str) -> Result<(), String> { let ret = unsafe { let c_command = CString::new(command).unwrap(); - sys::mixer::Mix_SetMusicCMD(c_command.as_ptr()) + mixer::Mix_SetMusicCMD(c_command.as_ptr()) }; if ret == -1 { Err(get_error()) @@ -899,13 +900,13 @@ impl<'a> Music<'a> { /// Halt playback of music. pub fn halt() { unsafe { - sys::mixer::Mix_HaltMusic(); + mixer::Mix_HaltMusic(); } } /// Gradually fade out the music over ms milliseconds starting from now. pub fn fade_out(ms: i32) -> Result<(), String> { - let ret = unsafe { sys::mixer::Mix_FadeOutMusic(ms as c_int) }; + let ret = unsafe { mixer::Mix_FadeOutMusic(ms as c_int) }; if ret == -1 { Err(get_error()) } else { @@ -930,14 +931,14 @@ impl<'a> Music<'a> { pub fn hook_finished(f: fn()) { unsafe { MUSIC_FINISHED_HOOK = Some(f); - sys::mixer::Mix_HookMusicFinished(Some(c_music_finished_hook as extern "C" fn())); + mixer::Mix_HookMusicFinished(Some(c_music_finished_hook as extern "C" fn())); } } /// A previously set up function would no longer be called when music playback is halted. pub fn unhook_finished() { unsafe { - sys::mixer::Mix_HookMusicFinished(None); + mixer::Mix_HookMusicFinished(None); // unset from c, then rust, to avoid race condition MUSIC_FINISHED_HOOK = None; } @@ -945,21 +946,21 @@ impl<'a> Music<'a> { /// If music is actively playing, or not. pub fn is_playing() -> bool { - unsafe { sys::mixer::Mix_PlayingMusic() == 1 } + unsafe { mixer::Mix_PlayingMusic() == 1 } } /// If music is paused, or not. pub fn is_paused() -> bool { - unsafe { sys::mixer::Mix_PausedMusic() == 1 } + unsafe { mixer::Mix_PausedMusic() == 1 } } /// If music is fading, or not. pub fn get_fading() -> Fading { - let ret = unsafe { sys::mixer::Mix_FadingMusic() as i32 } as c_uint; + let ret = unsafe { mixer::Mix_FadingMusic() as i32 } as c_uint; match ret { - sys::mixer::Mix_Fading_MIX_FADING_OUT => Fading::FadingOut, - sys::mixer::Mix_Fading_MIX_FADING_IN => Fading::FadingIn, - sys::mixer::Mix_Fading_MIX_NO_FADING | _ => Fading::NoFading + mixer::Mix_Fading_MIX_FADING_OUT => Fading::FadingOut, + mixer::Mix_Fading_MIX_FADING_IN => Fading::FadingIn, + mixer::Mix_Fading_MIX_NO_FADING | _ => Fading::NoFading } } } diff --git a/src/sdl2/mouse/mod.rs b/src/sdl2/mouse/mod.rs index 4beeb251..0839216e 100644 --- a/src/sdl2/mouse/mod.rs +++ b/src/sdl2/mouse/mod.rs @@ -5,6 +5,7 @@ use crate::EventPump; use std::mem::transmute; use crate::sys; +use crate::sys::SDL_SystemCursor; mod relative; pub use self::relative::RelativeMouseState; @@ -12,18 +13,18 @@ pub use self::relative::RelativeMouseState; #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[repr(u32)] pub enum SystemCursor { - Arrow = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_ARROW as u32, - IBeam = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_IBEAM as u32, - Wait = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_WAIT as u32, - Crosshair = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_CROSSHAIR as u32, - WaitArrow = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_WAITARROW as u32, - SizeNWSE = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENWSE as u32, - SizeNESW = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENESW as u32, - SizeWE = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZEWE as u32, - SizeNS = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENS as u32, - SizeAll = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZEALL as u32, - No = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_NO as u32, - Hand = sys::SDL_SystemCursor::SDL_SYSTEM_CURSOR_HAND as u32, + Arrow = SDL_SystemCursor::SDL_SYSTEM_CURSOR_ARROW as u32, + IBeam = SDL_SystemCursor::SDL_SYSTEM_CURSOR_IBEAM as u32, + Wait = SDL_SystemCursor::SDL_SYSTEM_CURSOR_WAIT as u32, + Crosshair = SDL_SystemCursor::SDL_SYSTEM_CURSOR_CROSSHAIR as u32, + WaitArrow = SDL_SystemCursor::SDL_SYSTEM_CURSOR_WAITARROW as u32, + SizeNWSE = SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENWSE as u32, + SizeNESW = SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENESW as u32, + SizeWE = SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZEWE as u32, + SizeNS = SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZENS as u32, + SizeAll = SDL_SystemCursor::SDL_SYSTEM_CURSOR_SIZEALL as u32, + No = SDL_SystemCursor::SDL_SYSTEM_CURSOR_NO as u32, + Hand = SDL_SystemCursor::SDL_SYSTEM_CURSOR_HAND as u32, } pub struct Cursor { @@ -48,7 +49,7 @@ impl Cursor { if raw.is_null() { Err(get_error()) } else { - Ok(Cursor{ raw: raw }) + Ok(Cursor{ raw }) } } } @@ -61,7 +62,7 @@ impl Cursor { if raw.is_null() { Err(get_error()) } else { - Ok(Cursor{ raw: raw }) + Ok(Cursor{ raw }) } } } @@ -73,7 +74,7 @@ impl Cursor { if raw.is_null() { Err(get_error()) } else { - Ok(Cursor{ raw: raw }) + Ok(Cursor{ raw }) } } } @@ -167,7 +168,7 @@ impl MouseState { }; MouseState { - mouse_state: mouse_state, + mouse_state, x: x as i32, y: y as i32 } diff --git a/src/sdl2/mouse/relative.rs b/src/sdl2/mouse/relative.rs index b916c671..c8ea4120 100644 --- a/src/sdl2/mouse/relative.rs +++ b/src/sdl2/mouse/relative.rs @@ -21,7 +21,7 @@ impl RelativeMouseState { }; RelativeMouseState { - mouse_state: mouse_state, + mouse_state, x: x as i32, y: y as i32 } diff --git a/src/sdl2/pixels.rs b/src/sdl2/pixels.rs index d82c5f0f..be1c3b34 100644 --- a/src/sdl2/pixels.rs +++ b/src/sdl2/pixels.rs @@ -5,6 +5,7 @@ use self::rand::distributions::{Distribution, Standard}; use libc::uint32_t; use num::FromPrimitive; use std::mem::transmute; +use std::convert::TryFrom; use crate::sys; use crate::get_error; @@ -38,7 +39,7 @@ impl Palette { Err(get_error()) } else { Ok(Palette { - raw: raw, + raw, }) } } @@ -107,13 +108,13 @@ impl Color { #[inline] #[allow(non_snake_case)] pub fn RGB(r: u8, g: u8, b: u8) -> Color { - Color { r: r, g: g, b: b, a: 0xff } + Color { r, g, b, a: 0xff } } #[inline] #[allow(non_snake_case)] pub fn RGBA(r: u8, g: u8, b: u8, a: u8) -> Color { - Color { r: r, g: g, b: b, a: a } + Color { r, g, b, a } } pub fn to_u32(&self, format: &PixelFormat) -> u32 { @@ -283,10 +284,10 @@ impl PixelFormatEnum { } else { Ok(PixelMasks { bpp: bpp as u8, - rmask: rmask, - gmask: gmask, - bmask: bmask, - amask: amask + rmask, + gmask, + bmask, + amask }) } } @@ -460,6 +461,21 @@ impl FromPrimitive for PixelFormatEnum { fn from_u64(n: u64) -> Option { FromPrimitive::from_i64(n as i64) } } +impl TryFrom for PixelFormat { + type Error = String; + + fn try_from(pfe: PixelFormatEnum) -> Result { + unsafe { + let pf_ptr = sys::SDL_AllocFormat(pfe as u32); + if pf_ptr.is_null() { + Err(get_error()) + } else { + Ok(PixelFormat::from_ll(pf_ptr)) + } + } + } +} + // Just test a round-trip conversion from PixelFormat to // PixelFormatEnum and back. diff --git a/src/sdl2/rect.rs b/src/sdl2/rect.rs index cffac10b..07154b1a 100644 --- a/src/sdl2/rect.rs +++ b/src/sdl2/rect.rs @@ -115,7 +115,7 @@ impl Rect { w: clamp_size(width) as i32, h: clamp_size(height) as i32, }; - Rect { raw: raw } + Rect { raw } } /// Creates a new rectangle centered on the given position. @@ -136,7 +136,7 @@ impl Rect { w: clamp_size(width) as i32, h: clamp_size(height) as i32, }; - let mut rect = Rect { raw: raw }; + let mut rect = Rect { raw }; rect.center_on(center.into()); rect } diff --git a/src/sdl2/render.rs b/src/sdl2/render.rs index a8101966..76b818ec 100644 --- a/src/sdl2/render.rs +++ b/src/sdl2/render.rs @@ -53,6 +53,8 @@ use std::mem::{transmute, uninitialized}; use libc::c_void; use crate::sys; +use crate::sys::SDL_TextureAccess; +use crate::sys::SDL_BlendMode; /// Contains the description of an error returned by SDL #[derive(Debug)] @@ -102,9 +104,9 @@ impl Error for TargetRenderError { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[repr(i32)] pub enum TextureAccess { - Static = sys::SDL_TextureAccess::SDL_TEXTUREACCESS_STATIC as i32, - Streaming = sys::SDL_TextureAccess::SDL_TEXTUREACCESS_STREAMING as i32, - Target = sys::SDL_TextureAccess::SDL_TEXTUREACCESS_TARGET as i32, + Static = SDL_TextureAccess::SDL_TEXTUREACCESS_STATIC as i32, + Streaming = SDL_TextureAccess::SDL_TEXTUREACCESS_STREAMING as i32, + Target = SDL_TextureAccess::SDL_TEXTUREACCESS_TARGET as i32, } impl FromPrimitive for TextureAccess { @@ -112,10 +114,10 @@ impl FromPrimitive for TextureAccess { use self::TextureAccess::*; let n = n as u32; - Some(match unsafe { transmute::(n) } { - sys::SDL_TextureAccess::SDL_TEXTUREACCESS_STATIC => Static, - sys::SDL_TextureAccess::SDL_TEXTUREACCESS_STREAMING => Streaming, - sys::SDL_TextureAccess::SDL_TEXTUREACCESS_TARGET => Target, + Some(match unsafe { transmute::(n) } { + SDL_TextureAccess::SDL_TEXTUREACCESS_STATIC => Static, + SDL_TextureAccess::SDL_TEXTUREACCESS_STREAMING => Streaming, + SDL_TextureAccess::SDL_TEXTUREACCESS_TARGET => Target, }) } @@ -138,11 +140,11 @@ pub struct RendererInfo { #[repr(i32)] #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] pub enum BlendMode { - None = sys::SDL_BlendMode::SDL_BLENDMODE_NONE as i32, - Blend = sys::SDL_BlendMode::SDL_BLENDMODE_BLEND as i32, - Add = sys::SDL_BlendMode::SDL_BLENDMODE_ADD as i32, - Mod = sys::SDL_BlendMode::SDL_BLENDMODE_MOD as i32, - Invalid = sys::SDL_BlendMode::SDL_BLENDMODE_INVALID as i32, + None = SDL_BlendMode::SDL_BLENDMODE_NONE as i32, + Blend = SDL_BlendMode::SDL_BLENDMODE_BLEND as i32, + Add = SDL_BlendMode::SDL_BLENDMODE_ADD as i32, + Mod = SDL_BlendMode::SDL_BLENDMODE_MOD as i32, + Invalid = SDL_BlendMode::SDL_BLENDMODE_INVALID as i32, } impl FromPrimitive for BlendMode { @@ -150,12 +152,12 @@ impl FromPrimitive for BlendMode { use self::BlendMode::*; let n = n as u32; - Some(match unsafe { transmute::(n) } { - sys::SDL_BlendMode::SDL_BLENDMODE_NONE => None, - sys::SDL_BlendMode::SDL_BLENDMODE_BLEND => Blend, - sys::SDL_BlendMode::SDL_BLENDMODE_ADD => Add, - sys::SDL_BlendMode::SDL_BLENDMODE_MOD => Mod, - sys::SDL_BlendMode::SDL_BLENDMODE_INVALID => Invalid, + Some(match unsafe { transmute::(n) } { + SDL_BlendMode::SDL_BLENDMODE_NONE => None, + SDL_BlendMode::SDL_BLENDMODE_BLEND => Blend, + SDL_BlendMode::SDL_BLENDMODE_ADD => Add, + SDL_BlendMode::SDL_BLENDMODE_MOD => Mod, + SDL_BlendMode::SDL_BLENDMODE_INVALID => Invalid, }) } @@ -179,9 +181,9 @@ impl RendererInfo { let name = CStr::from_ptr(info.name as *const _).to_str().unwrap(); RendererInfo { - name: name, + name, flags: info.flags, - texture_formats: texture_formats, + texture_formats, max_texture_width: info.max_texture_width as u32, max_texture_height: info.max_texture_height as u32, } @@ -225,7 +227,7 @@ impl RendererContext { pub unsafe fn from_ll(raw: *mut sys::SDL_Renderer, target: Rc) -> Self { RendererContext { - raw: raw, + raw, _target: target, } } @@ -342,8 +344,8 @@ impl<'s> Canvas> { let default_pixel_format = surface.pixel_format_enum(); Ok(Canvas { target: surface, - context: context, - default_pixel_format: default_pixel_format, + context, + default_pixel_format, }) } else { Err(get_error()) @@ -407,7 +409,7 @@ impl Canvas { pub fn into_window(self) -> Window { self.target } - + #[inline] pub fn default_pixel_format(&self) -> PixelFormatEnum { self.window().window_pixel_format() @@ -588,7 +590,7 @@ impl Canvas { Err(TargetRenderError::NotSupported) } } - + #[cfg(feature = "unsafe_textures")] pub fn with_multiple_texture_canvas<'a : 's, 's, I, F, U: 's>(&mut self, textures: I, mut f: F) -> Result<(), TargetRenderError> @@ -640,7 +642,7 @@ impl CanvasBuilder { /// Initializes a new `CanvasBuilder`. pub fn new(window: Window) -> CanvasBuilder { CanvasBuilder { - window: window, + window, // -1 means to initialize the first rendering driver supporting the // renderer flags index: None, @@ -665,9 +667,9 @@ impl CanvasBuilder { let context = Rc::new(unsafe { RendererContext::from_ll(raw, self.window.context()) }); let default_pixel_format = self.window.window_pixel_format(); Ok(Canvas { - context: context, + context, target: self.window, - default_pixel_format: default_pixel_format, + default_pixel_format, }) } } @@ -881,16 +883,16 @@ impl TextureCreator { #[inline] pub unsafe fn raw_create_texture(&self, raw: *mut sys::SDL_Texture) -> Texture { Texture { - raw: raw, + raw, _marker: PhantomData, } } - + /// Create a texture from its raw `SDL_Texture`. Should be used with care. #[cfg(feature = "unsafe_textures")] pub unsafe fn raw_create_texture(&self, raw: *mut sys::SDL_Texture) -> Texture { Texture { - raw: raw, + raw, } } } @@ -937,7 +939,7 @@ impl Canvas { /// Gets the blend mode used for drawing operations. pub fn blend_mode(&self) -> BlendMode { - let mut blend: sys::SDL_BlendMode; + let mut blend: SDL_BlendMode; unsafe { blend = uninitialized(); } let ret = unsafe { sys::SDL_GetRenderDrawBlendMode(self.context.raw, &mut blend) }; // Should only fail on an invalid renderer @@ -1426,7 +1428,7 @@ impl Canvas { unsafe { Ok(self.raw_create_texture(result)) } } } - + #[cfg(feature = "unsafe_textures")] /// Create a texture from its raw `SDL_Texture`. Should be used with care. /// @@ -1435,7 +1437,7 @@ impl Canvas { /// Note that this method is only accessible in Canvas with the `unsafe_textures` feature. pub unsafe fn raw_create_texture(&self, raw: *mut sys::SDL_Texture) -> Texture { Texture { - raw: raw, + raw, } } } @@ -1737,7 +1739,7 @@ impl InternalTexture { } pub fn blend_mode(&self) -> BlendMode { - let mut blend: sys::SDL_BlendMode; + let mut blend: SDL_BlendMode; unsafe { blend = uninitialized(); } let ret = unsafe { sys::SDL_GetTextureBlendMode(self.raw, &mut blend) }; @@ -1873,7 +1875,7 @@ impl InternalTexture { plane: "y", length: y_plane.len(), pitch: y_pitch, - height: height, + height, }); } if u_plane.len() != (u_pitch * height / 2) { @@ -2027,7 +2029,7 @@ impl<'r> Texture<'r> { pub fn set_color_mod(&mut self, red: u8, green: u8, blue: u8) { InternalTexture{ raw: self.raw }.set_color_mod(red, green, blue) } - + /// Gets the additional color value multiplied into render copy operations. #[inline] pub fn color_mod(&self) -> (u8, u8, u8) { @@ -2106,7 +2108,7 @@ impl<'r> Texture<'r> { { InternalTexture { raw: self.raw }.with_lock(rect, func) } - + /// Binds an OpenGL/ES/ES2 texture to the current /// context for use with when rendering OpenGL primitives directly. #[inline] @@ -2224,7 +2226,7 @@ impl<> Texture<> { { InternalTexture { raw: self.raw }.with_lock(rect, func) } - + /// Binds an OpenGL/ES/ES2 texture to the current /// context for use with when rendering OpenGL primitives directly. #[inline] diff --git a/src/sdl2/rwops.rs b/src/sdl2/rwops.rs index 7438f6de..8d595d12 100644 --- a/src/sdl2/rwops.rs +++ b/src/sdl2/rwops.rs @@ -20,7 +20,7 @@ impl<'a> RWops<'a> { pub unsafe fn from_ll<'b>(raw: *mut sys::SDL_RWops) -> RWops<'b> { RWops { - raw: raw, + raw, _marker: PhantomData } } @@ -37,7 +37,7 @@ impl<'a> RWops<'a> { Err(get_error()) } else { Ok(RWops { - raw: raw, + raw, _marker: PhantomData }) } @@ -55,7 +55,7 @@ impl<'a> RWops<'a> { Err(get_error()) } else { Ok(RWops { - raw: raw, + raw, _marker: PhantomData }) } @@ -88,7 +88,7 @@ impl<'a> RWops<'a> { Err(get_error()) } else { Ok(RWops { - raw: raw, + raw, _marker: PhantomData }) } diff --git a/src/sdl2/surface.rs b/src/sdl2/surface.rs index 415fb423..decf3d07 100644 --- a/src/sdl2/surface.rs +++ b/src/sdl2/surface.rs @@ -99,7 +99,7 @@ impl<'a> AsMut for Surface<'a> { impl<'a> Surface<'a> { pub unsafe fn from_ll<'b>(raw: *mut sys::SDL_Surface) -> Surface<'b> { let context = SurfaceContext { - raw: raw, + raw, _marker: PhantomData, }; Surface { context: Rc::new(context) } diff --git a/src/sdl2/timer.rs b/src/sdl2/timer.rs index ed87668a..631f9594 100644 --- a/src/sdl2/timer.rs +++ b/src/sdl2/timer.rs @@ -54,7 +54,7 @@ impl TimerSubsystem { } } -pub type TimerCallback<'a> = Box u32+'a+Sync>; +pub type TimerCallback<'a> = Box u32+'a+Sync>; pub struct Timer<'b, 'a> { callback: Option>>, @@ -82,7 +82,7 @@ impl<'b, 'a> Drop for Timer<'b, 'a> { extern "C" fn c_timer_callback(_interval: u32, param: *mut c_void) -> uint32_t { unsafe { - let f: *mut Box u32> = mem::transmute(param); + let f: *mut Box u32> = mem::transmute(param); (*f)() as uint32_t } } diff --git a/src/sdl2/ttf/context.rs b/src/sdl2/ttf/context.rs index 5988f0d1..ad3d5721 100644 --- a/src/sdl2/ttf/context.rs +++ b/src/sdl2/ttf/context.rs @@ -6,7 +6,7 @@ use std::path::Path; use ::get_error; use ::rwops::RWops; use ::version::Version; -use sys; +use sys::ttf; use super::font::{ internal_load_font, @@ -22,7 +22,7 @@ pub struct Sdl2TtfContext; // Clean up the context once it goes out of scope impl Drop for Sdl2TtfContext { fn drop(&mut self) { - unsafe { sys::ttf::TTF_Quit(); } + unsafe { ttf::TTF_Quit(); } } } @@ -44,7 +44,7 @@ impl Sdl2TtfContext { pub fn load_font_from_rwops<'ttf,'r>(&'ttf self, rwops: RWops<'r>, point_size: u16) -> Result, String> { let raw = unsafe { - sys::ttf::TTF_OpenFontRW(rwops.raw(), 0, point_size as c_int) + ttf::TTF_OpenFontRW(rwops.raw(), 0, point_size as c_int) }; if (raw as *mut ()).is_null() { Err(get_error()) @@ -58,7 +58,7 @@ impl Sdl2TtfContext { pub fn load_font_at_index_from_rwops<'ttf,'r>(&'ttf self, rwops: RWops<'r>, index: u32, point_size: u16) -> Result, String> { let raw = unsafe { - sys::ttf::TTF_OpenFontIndexRW(rwops.raw(), 0, point_size as c_int, + ttf::TTF_OpenFontIndexRW(rwops.raw(), 0, point_size as c_int, index as c_long) }; if (raw as *mut ()).is_null() { @@ -72,7 +72,7 @@ impl Sdl2TtfContext { /// Returns the version of the dynamically linked `SDL_TTF` library pub fn get_linked_version() -> Version { unsafe { - Version::from_ll(*sys::ttf::TTF_Linked_Version()) + Version::from_ll(*ttf::TTF_Linked_Version()) } } @@ -118,9 +118,9 @@ impl fmt::Display for InitError { /// clean up the library once it goes out of scope. pub fn init() -> Result { unsafe { - if sys::ttf::TTF_WasInit() == 1 { + if ttf::TTF_WasInit() == 1 { Err(InitError::AlreadyInitializedError) - } else if sys::ttf::TTF_Init() == 0 { + } else if ttf::TTF_Init() == 0 { Ok(Sdl2TtfContext) } else { Err(InitError::InitializationError( @@ -133,6 +133,6 @@ pub fn init() -> Result { /// Returns whether library has been initialized already. pub fn has_been_initialized() -> bool { unsafe { - sys::ttf::TTF_WasInit() == 1 + ttf::TTF_WasInit() == 1 } } diff --git a/src/sdl2/ttf/font.rs b/src/sdl2/ttf/font.rs index 1104d6d1..3b341308 100644 --- a/src/sdl2/ttf/font.rs +++ b/src/sdl2/ttf/font.rs @@ -7,21 +7,20 @@ use std::ffi::NulError; use std::fmt; use std::marker::PhantomData; use ::surface::Surface; -use sys; +use sys::ttf; use sys::SDL_Surface; use ::get_error; use ::pixels::Color; use ::rwops::RWops; -// Absolute paths are a workaround for https://github.com/rust-lang-nursery/bitflags/issues/39 . bitflags! { /// The styling of a font. pub struct FontStyle: i32 { - const NORMAL = sys::ttf::TTF_STYLE_NORMAL as i32; - const BOLD = sys::ttf::TTF_STYLE_BOLD as i32; - const ITALIC = sys::ttf::TTF_STYLE_ITALIC as i32; - const UNDERLINE = sys::ttf::TTF_STYLE_UNDERLINE as i32; - const STRIKETHROUGH = sys::ttf::TTF_STYLE_STRIKETHROUGH as i32; + const NORMAL = ttf::TTF_STYLE_NORMAL as i32; + const BOLD = ttf::TTF_STYLE_BOLD as i32; + const ITALIC = ttf::TTF_STYLE_ITALIC as i32; + const UNDERLINE = ttf::TTF_STYLE_UNDERLINE as i32; + const STRIKETHROUGH = ttf::TTF_STYLE_STRIKETHROUGH as i32; } } @@ -30,10 +29,10 @@ bitflags! { #[repr(i32)] #[derive(Debug, PartialEq, Clone)] pub enum Hinting { - Normal = sys::ttf::TTF_HINTING_NORMAL as i32, - Light = sys::ttf::TTF_HINTING_LIGHT as i32, - Mono = sys::ttf::TTF_HINTING_MONO as i32, - None = sys::ttf::TTF_HINTING_NONE as i32, + Normal = ttf::TTF_HINTING_NORMAL as i32, + Light = ttf::TTF_HINTING_LIGHT as i32, + Mono = ttf::TTF_HINTING_MONO as i32, + None = ttf::TTF_HINTING_NONE as i32, } /// Information about a specific glyph (character) in a font face. @@ -155,11 +154,11 @@ impl<'f,'text> PartialRendering<'f,'text> { let raw = unsafe { match self.text { RenderableText::Utf8(_) | RenderableText::Char(_) => { - sys::ttf::TTF_RenderUTF8_Solid(self.font.raw(), + ttf::TTF_RenderUTF8_Solid(self.font.raw(), source.as_ptr(), color) }, RenderableText::Latin1(_) => { - sys::ttf::TTF_RenderText_Solid(self.font.raw(), + ttf::TTF_RenderText_Solid(self.font.raw(), source.as_ptr(), color) }, } @@ -178,11 +177,11 @@ impl<'f,'text> PartialRendering<'f,'text> { let raw = unsafe { match self.text { RenderableText::Utf8(_) | RenderableText::Char(_) => { - sys::ttf::TTF_RenderUTF8_Shaded(self.font.raw(), + ttf::TTF_RenderUTF8_Shaded(self.font.raw(), source.as_ptr(), foreground, background) }, RenderableText::Latin1(_) => { - sys::ttf::TTF_RenderText_Shaded(self.font.raw(), + ttf::TTF_RenderText_Shaded(self.font.raw(), source.as_ptr(), foreground, background) }, } @@ -200,11 +199,11 @@ impl<'f,'text> PartialRendering<'f,'text> { let raw = unsafe { match self.text { RenderableText::Utf8(_) | RenderableText::Char(_) => { - sys::ttf::TTF_RenderUTF8_Blended(self.font.raw(), + ttf::TTF_RenderUTF8_Blended(self.font.raw(), source.as_ptr(), color) }, RenderableText::Latin1(_) => { - sys::ttf::TTF_RenderText_Blended(self.font.raw(), + ttf::TTF_RenderText_Blended(self.font.raw(), source.as_ptr(), color) }, } @@ -223,11 +222,11 @@ impl<'f,'text> PartialRendering<'f,'text> { let raw = unsafe { match self.text { RenderableText::Utf8(_) | RenderableText::Char(_) => { - sys::ttf::TTF_RenderUTF8_Blended_Wrapped(self.font.raw(), + ttf::TTF_RenderUTF8_Blended_Wrapped(self.font.raw(), source.as_ptr(), color, wrap_max_width) }, RenderableText::Latin1(_) => { - sys::ttf::TTF_RenderText_Blended_Wrapped(self.font.raw(), + ttf::TTF_RenderText_Blended_Wrapped(self.font.raw(), source.as_ptr(), color, wrap_max_width) }, } @@ -238,7 +237,7 @@ impl<'f,'text> PartialRendering<'f,'text> { /// A loaded TTF font. pub struct Font<'ttf_module,'rwops> { - raw: *mut sys::ttf::TTF_Font, + raw: *mut ttf::TTF_Font, // RWops is only stored here because it must not outlive // the Font struct, and this RWops should not be used by // anything else @@ -257,8 +256,8 @@ impl<'ttf,'r> Drop for Font<'ttf,'r> { fn drop(&mut self) { unsafe { // avoid close font after quit() - if sys::ttf::TTF_WasInit() == 1 { - sys::ttf::TTF_CloseFont(self.raw); + if ttf::TTF_WasInit() == 1 { + ttf::TTF_CloseFont(self.raw); } } } @@ -268,7 +267,7 @@ impl<'ttf,'r> Drop for Font<'ttf,'r> { pub fn internal_load_font<'ttf,P:AsRef>(path: P, ptsize: u16) -> Result, String> { unsafe { let cstring = CString::new(path.as_ref().to_str().unwrap()).unwrap(); - let raw = sys::ttf::TTF_OpenFont(cstring.as_ptr(), ptsize as c_int); + let raw = ttf::TTF_OpenFont(cstring.as_ptr(), ptsize as c_int); if raw.is_null() { Err(get_error()) } else { @@ -278,7 +277,7 @@ pub fn internal_load_font<'ttf,P:AsRef>(path: P, ptsize: u16) -> Result(raw: *mut sys::ttf::TTF_Font, rwops: R) +pub fn internal_load_font_from_ll<'ttf,'r, R>(raw: *mut ttf::TTF_Font, rwops: R) -> Font<'ttf,'r> where R: Into>> { Font { raw: raw, rwops: rwops.into(), _marker: PhantomData } @@ -290,7 +289,7 @@ pub fn internal_load_font_at_index<'ttf,P: AsRef>(path: P, index: u32, pts unsafe { let cstring = CString::new(path.as_ref().to_str().unwrap().as_bytes()) .unwrap(); - let raw = sys::ttf::TTF_OpenFontIndex(cstring.as_ptr(), + let raw = ttf::TTF_OpenFontIndex(cstring.as_ptr(), ptsize as c_int, index as c_long); if raw.is_null() { Err(get_error()) @@ -302,7 +301,7 @@ pub fn internal_load_font_at_index<'ttf,P: AsRef>(path: P, index: u32, pts impl<'ttf,'r> Font<'ttf,'r> { /// Returns the underlying C font object. - unsafe fn raw(&self) -> *mut sys::ttf::TTF_Font { + unsafe fn raw(&self) -> *mut ttf::TTF_Font { self.raw } @@ -339,7 +338,7 @@ impl<'ttf,'r> Font<'ttf,'r> { let (res, size) = unsafe { let mut w = 0; // mutated by C code let mut h = 0; // mutated by C code - let ret = sys::ttf::TTF_SizeUTF8(self.raw, c_string.as_ptr(), &mut w, &mut h); + let ret = ttf::TTF_SizeUTF8(self.raw, c_string.as_ptr(), &mut w, &mut h); (ret, (w as u32, h as u32)) }; if res == 0 { @@ -358,7 +357,7 @@ impl<'ttf,'r> Font<'ttf,'r> { let (res, size) = unsafe { let mut w : i32 = 0; // mutated by C code let mut h : i32 = 0; // mutated by C code - let ret = sys::ttf::TTF_SizeText(self.raw, c_string.as_ptr(), &w as *const _ as *mut i32, &h as *const _ as *mut i32); + let ret = ttf::TTF_SizeText(self.raw, c_string.as_ptr(), &w as *const _ as *mut i32, &h as *const _ as *mut i32); (ret, (w as u32, h as u32)) }; if res == 0 { @@ -379,7 +378,7 @@ impl<'ttf,'r> Font<'ttf,'r> { /// Returns the font's style flags. pub fn get_style(&self) -> FontStyle { unsafe { - let raw = sys::ttf::TTF_GetFontStyle(self.raw); + let raw = ttf::TTF_GetFontStyle(self.raw); FontStyle::from_bits_truncate(raw as i32) } } @@ -387,32 +386,32 @@ impl<'ttf,'r> Font<'ttf,'r> { /// Sets the font's style flags. pub fn set_style(&mut self, styles: FontStyle) { unsafe { - sys::ttf::TTF_SetFontStyle(self.raw, styles.bits() as c_int) + ttf::TTF_SetFontStyle(self.raw, styles.bits() as c_int) } } /// Returns the width of the font's outline. pub fn get_outline_width(&self) -> u16 { unsafe { - sys::ttf::TTF_GetFontOutline(self.raw) as u16 + ttf::TTF_GetFontOutline(self.raw) as u16 } } /// Sets the width of the font's outline. pub fn set_outline_width(&mut self, width: u16) { unsafe { - sys::ttf::TTF_SetFontOutline(self.raw, width as c_int) + ttf::TTF_SetFontOutline(self.raw, width as c_int) } } /// Returns the font's freetype hints. pub fn get_hinting(&self) -> Hinting { unsafe { - match sys::ttf::TTF_GetFontHinting(self.raw) as c_uint { - sys::ttf::TTF_HINTING_NORMAL => Hinting::Normal, - sys::ttf::TTF_HINTING_LIGHT => Hinting::Light, - sys::ttf::TTF_HINTING_MONO => Hinting::Mono, - sys::ttf::TTF_HINTING_NONE | _ => Hinting::None + match ttf::TTF_GetFontHinting(self.raw) as c_uint { + ttf::TTF_HINTING_NORMAL => Hinting::Normal, + ttf::TTF_HINTING_LIGHT => Hinting::Light, + ttf::TTF_HINTING_MONO => Hinting::Mono, + ttf::TTF_HINTING_NONE | _ => Hinting::None } } } @@ -420,35 +419,35 @@ impl<'ttf,'r> Font<'ttf,'r> { /// Sets the font's freetype hints. pub fn set_hinting(&mut self, hinting: Hinting) { unsafe { - sys::ttf::TTF_SetFontHinting(self.raw, hinting as c_int) + ttf::TTF_SetFontHinting(self.raw, hinting as c_int) } } /// Returns whether the font is kerning. pub fn get_kerning(&self) -> bool { unsafe { - sys::ttf::TTF_GetFontKerning(self.raw) != 0 + ttf::TTF_GetFontKerning(self.raw) != 0 } } /// Sets whether the font should use kerning. pub fn set_kerning(&mut self, kerning: bool) { unsafe { - sys::ttf::TTF_SetFontKerning(self.raw, kerning as c_int) + ttf::TTF_SetFontKerning(self.raw, kerning as c_int) } } pub fn height(&self) -> i32 { //! Get font maximum total height. unsafe { - sys::ttf::TTF_FontHeight(self.raw) as i32 + ttf::TTF_FontHeight(self.raw) as i32 } } /// Returns the font's highest ascent (height above base). pub fn ascent(&self) -> i32 { unsafe { - sys::ttf::TTF_FontAscent(self.raw) as i32 + ttf::TTF_FontAscent(self.raw) as i32 } } @@ -456,28 +455,28 @@ impl<'ttf,'r> Font<'ttf,'r> { /// This is a negative number. pub fn descent(&self) -> i32 { unsafe { - sys::ttf::TTF_FontDescent(self.raw) as i32 + ttf::TTF_FontDescent(self.raw) as i32 } } /// Returns the recommended line spacing for text rendered with this font. pub fn recommended_line_spacing(&self) -> i32 { unsafe { - sys::ttf::TTF_FontLineSkip(self.raw) as i32 + ttf::TTF_FontLineSkip(self.raw) as i32 } } /// Returns the number of faces in this font. pub fn face_count(&self) -> u16 { unsafe { - sys::ttf::TTF_FontFaces(self.raw) as u16 + ttf::TTF_FontFaces(self.raw) as u16 } } /// Returns whether the font is monospaced. pub fn face_is_fixed_width(&self) -> bool { unsafe { - sys::ttf::TTF_FontFaceIsFixedWidth(self.raw) != 0 + ttf::TTF_FontFaceIsFixedWidth(self.raw) != 0 } } @@ -485,7 +484,7 @@ impl<'ttf,'r> Font<'ttf,'r> { pub fn face_family_name(&self) -> Option { unsafe { // not owns buffer - let cname = sys::ttf::TTF_FontFaceFamilyName(self.raw); + let cname = ttf::TTF_FontFaceFamilyName(self.raw); if cname.is_null() { None } else { @@ -497,7 +496,7 @@ impl<'ttf,'r> Font<'ttf,'r> { /// Returns the name of the current font face. pub fn face_style_name(&self) -> Option { unsafe { - let cname = sys::ttf::TTF_FontFaceStyleName(self.raw); + let cname = ttf::TTF_FontFaceStyleName(self.raw); if cname.is_null() { None } else { @@ -509,7 +508,7 @@ impl<'ttf,'r> Font<'ttf,'r> { /// Returns the index of the given character in this font face. pub fn find_glyph(&self, ch: char) -> Option { unsafe { - let ret = sys::ttf::TTF_GlyphIsProvided(self.raw, ch as u16); + let ret = ttf::TTF_GlyphIsProvided(self.raw, ch as u16); if ret == 0 { None } else { @@ -526,7 +525,7 @@ impl<'ttf,'r> Font<'ttf,'r> { let maxy = 0; let advance = 0; let ret = unsafe { - sys::ttf::TTF_GlyphMetrics( + ttf::TTF_GlyphMetrics( self.raw, ch as u16, &minx as *const _ as *mut _, diff --git a/src/sdl2/video.rs b/src/sdl2/video.rs index fdfff1e7..7179187c 100644 --- a/src/sdl2/video.rs +++ b/src/sdl2/video.rs @@ -409,7 +409,7 @@ pub mod gl_attr { let flags = gl_get_attribute!(SDL_GL_CONTEXT_FLAGS); ContextFlags { - flags: flags + flags } } @@ -427,10 +427,10 @@ pub struct DisplayMode { impl DisplayMode { pub fn new(format: PixelFormatEnum, w: i32, h: i32, refresh_rate: i32) -> DisplayMode { DisplayMode { - format: format, - w: w, - h: h, - refresh_rate: refresh_rate + format, + w, + h, + refresh_rate } } @@ -529,7 +529,7 @@ impl WindowContext { pub unsafe fn from_ll(subsystem: VideoSubsystem, raw: *mut sys::SDL_Window) -> WindowContext { WindowContext { subsystem: subsystem.clone(), - raw: raw, + raw, } } } @@ -919,8 +919,8 @@ impl WindowBuilder { pub fn new(v: &VideoSubsystem, title: &str, width: u32, height: u32) -> WindowBuilder { WindowBuilder { title: title.to_owned(), - width: width, - height: height, + width, + height, x: WindowPos::Undefined, y: WindowPos::Undefined, window_flags: 0, @@ -1072,7 +1072,7 @@ impl Window { #[inline] /// Create a new `Window` without taking ownership of the `WindowContext` pub unsafe fn from_ref(context: Rc) -> Window { - Window { context: context } + Window { context } } #[inline] @@ -1225,6 +1225,16 @@ impl Window { } } + /// Use this function to set the icon for a window. + /// + /// # Example: + /// ```compile_fail + /// // requires "--features 'image'" + /// use sdl2::surface::Surface; + /// + /// let window_icon = Surface::from_file("/path/to/icon.png")?; + /// window.set_icon(window_icon); + /// ``` pub fn set_icon>(&mut self, icon: S) { unsafe { sys::SDL_SetWindowIcon(self.context.raw, icon.as_ref().raw()) @@ -1248,7 +1258,7 @@ impl Window { unsafe { sys::SDL_GetWindowPosition(self.context.raw, &mut x, &mut y) }; (x as i32, y as i32) } - + /// Use this function to get the size of a window's borders (decorations) around the client area. /// /// # Remarks @@ -1457,9 +1467,9 @@ impl Window { #[cfg_attr(feature = "cargo-clippy", allow(type_complexity))] pub fn gamma_ramp(&self) -> Result<(Vec, Vec, Vec), String> { - let mut red: Vec = Vec::with_capacity(256); - let mut green: Vec = Vec::with_capacity(256); - let mut blue: Vec = Vec::with_capacity(256); + let mut red: Vec = vec![0; 256]; + let mut green: Vec = vec![0; 256]; + let mut blue: Vec = vec![0; 256]; let result = unsafe { sys::SDL_GetWindowGammaRamp( self.context.raw, red.as_mut_ptr(), green.as_mut_ptr(),