mirror of
https://github.com/touchHLE/rust-sdl2.git
synced 2026-01-31 01:25:23 +01:00
Add events example, add missing events
This commit is contained in:
@@ -121,6 +121,9 @@ name = "relative-mouse-state"
|
||||
[[example]]
|
||||
name = "renderer-target"
|
||||
|
||||
[[example]]
|
||||
name = "events"
|
||||
|
||||
[[example]]
|
||||
name = "renderer-texture"
|
||||
|
||||
|
||||
@@ -31,7 +31,10 @@ pub fn main() -> Result<(), String> {
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
|
||||
|
||||
canvas.clear();
|
||||
canvas.present();
|
||||
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
|
||||
// The rest of the game loop goes here...
|
||||
}
|
||||
|
||||
|
||||
48
examples/events.rs
Normal file
48
examples/events.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
extern crate sdl2;
|
||||
|
||||
use sdl2::pixels::Color;
|
||||
use sdl2::event::Event;
|
||||
use sdl2::keyboard::Keycode;
|
||||
use std::time::Duration;
|
||||
|
||||
pub fn main() -> Result<(), String> {
|
||||
let sdl_context = sdl2::init()?;
|
||||
let video_subsystem = sdl_context.video()?;
|
||||
|
||||
let window = video_subsystem.window("rust-sdl2 demo: Events", 800, 600)
|
||||
.position_centered()
|
||||
.resizable()
|
||||
.build()
|
||||
.map_err(|e| e.to_string())?;
|
||||
|
||||
let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
|
||||
|
||||
canvas.set_draw_color(Color::RGB(255, 0, 0));
|
||||
canvas.clear();
|
||||
canvas.present();
|
||||
let mut event_pump = sdl_context.event_pump()?;
|
||||
|
||||
println!("This example simply prints all events SDL knows about.");
|
||||
|
||||
'running: loop {
|
||||
for event in event_pump.poll_iter() {
|
||||
match event {
|
||||
Event::Quit {..} | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
|
||||
break 'running
|
||||
},
|
||||
// skip mouse motion intentionally because of the verbose it might cause.
|
||||
Event::MouseMotion {..} => {},
|
||||
e => {
|
||||
println!("{:?}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
canvas.clear();
|
||||
canvas.present();
|
||||
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
|
||||
// The rest of the game loop goes here...
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -279,6 +279,8 @@ pub enum EventType {
|
||||
ControllerDeviceRemoved = SDL_EventType::SDL_CONTROLLERDEVICEREMOVED as u32,
|
||||
ControllerDeviceRemapped = SDL_EventType::SDL_CONTROLLERDEVICEREMAPPED as u32,
|
||||
|
||||
|
||||
|
||||
FingerDown = SDL_EventType::SDL_FINGERDOWN as u32,
|
||||
FingerUp = SDL_EventType::SDL_FINGERUP as u32,
|
||||
FingerMotion = SDL_EventType::SDL_FINGERMOTION as u32,
|
||||
@@ -288,6 +290,15 @@ pub enum EventType {
|
||||
|
||||
ClipboardUpdate = SDL_EventType::SDL_CLIPBOARDUPDATE as u32,
|
||||
DropFile = SDL_EventType::SDL_DROPFILE as u32,
|
||||
DropText = SDL_EventType::SDL_DROPTEXT as u32,
|
||||
DropBegin = SDL_EventType::SDL_DROPBEGIN as u32,
|
||||
DropComplete = SDL_EventType::SDL_DROPCOMPLETE as u32,
|
||||
|
||||
AudioDeviceAdded = SDL_EventType::SDL_AUDIODEVICEADDED as u32,
|
||||
AudioDeviceRemoved = SDL_EventType::SDL_AUDIODEVICEREMOVED as u32,
|
||||
|
||||
RenderTargetsReset = SDL_EventType::SDL_RENDER_TARGETS_RESET as u32,
|
||||
RenderDeviceReset = SDL_EventType::SDL_RENDER_DEVICE_RESET as u32,
|
||||
|
||||
User = SDL_EventType::SDL_USEREVENT as u32,
|
||||
Last = SDL_EventType::SDL_LASTEVENT as u32,
|
||||
@@ -346,6 +357,15 @@ impl FromPrimitive for EventType {
|
||||
|
||||
SDL_CLIPBOARDUPDATE => ClipboardUpdate,
|
||||
SDL_DROPFILE => DropFile,
|
||||
SDL_DROPTEXT => DropText,
|
||||
SDL_DROPBEGIN => DropBegin,
|
||||
SDL_DROPCOMPLETE => DropComplete,
|
||||
|
||||
SDL_AUDIODEVICEADDED => AudioDeviceAdded,
|
||||
SDL_AUDIODEVICEREMOVED => AudioDeviceRemoved,
|
||||
|
||||
SDL_RENDER_TARGETS_RESET => RenderTargetsReset,
|
||||
SDL_RENDER_DEVICE_RESET => RenderDeviceReset,
|
||||
|
||||
SDL_USEREVENT => User,
|
||||
SDL_LASTEVENT => Last,
|
||||
@@ -671,6 +691,37 @@ pub enum Event {
|
||||
window_id: u32,
|
||||
filename: String
|
||||
},
|
||||
DropText {
|
||||
timestamp: u32,
|
||||
window_id: u32,
|
||||
filename: String
|
||||
},
|
||||
DropBegin {
|
||||
timestamp: u32,
|
||||
window_id: u32,
|
||||
},
|
||||
DropComplete {
|
||||
timestamp: u32,
|
||||
window_id: u32,
|
||||
},
|
||||
|
||||
AudioDeviceAdded {
|
||||
timestamp: u32,
|
||||
which: u32,
|
||||
iscapture: bool,
|
||||
},
|
||||
AudioDeviceRemoved {
|
||||
timestamp: u32,
|
||||
which: u32,
|
||||
iscapture: bool,
|
||||
},
|
||||
|
||||
RenderTargetsReset {
|
||||
timestamp: u32,
|
||||
},
|
||||
RenderDeviceReset {
|
||||
timestamp: u32,
|
||||
},
|
||||
|
||||
User {
|
||||
timestamp: u32,
|
||||
@@ -1563,7 +1614,65 @@ impl Event {
|
||||
window_id: event.windowID,
|
||||
filename: text
|
||||
}
|
||||
}
|
||||
},
|
||||
EventType::DropText => {
|
||||
let event = raw.drop;
|
||||
|
||||
let buf = CStr::from_ptr(event.file as *const _).to_bytes();
|
||||
let text = String::from_utf8_lossy(buf).to_string();
|
||||
sys::SDL_free(event.file as *mut c_void);
|
||||
|
||||
Event::DropText {
|
||||
timestamp: event.timestamp,
|
||||
window_id: event.windowID,
|
||||
filename: text
|
||||
}
|
||||
},
|
||||
EventType::DropBegin => {
|
||||
let event = raw.drop;
|
||||
|
||||
Event::DropBegin {
|
||||
timestamp: event.timestamp,
|
||||
window_id: event.windowID,
|
||||
}
|
||||
},
|
||||
EventType::DropComplete => {
|
||||
let event = raw.drop;
|
||||
|
||||
Event::DropComplete {
|
||||
timestamp: event.timestamp,
|
||||
window_id: event.windowID,
|
||||
}
|
||||
},
|
||||
EventType::AudioDeviceAdded => {
|
||||
let event = raw.adevice;
|
||||
Event::AudioDeviceAdded {
|
||||
timestamp: event.timestamp,
|
||||
which: event.which,
|
||||
// zero if an audio output device, non-zero if an audio capture device
|
||||
iscapture: event.iscapture != 0,
|
||||
}
|
||||
},
|
||||
EventType::AudioDeviceRemoved => {
|
||||
let event = raw.adevice;
|
||||
Event::AudioDeviceRemoved {
|
||||
timestamp: event.timestamp,
|
||||
which: event.which,
|
||||
// zero if an audio output device, non-zero if an audio capture device
|
||||
iscapture: event.iscapture != 0,
|
||||
}
|
||||
},
|
||||
|
||||
EventType::RenderTargetsReset => {
|
||||
Event::RenderTargetsReset {
|
||||
timestamp: raw.common.timestamp
|
||||
}
|
||||
},
|
||||
EventType::RenderDeviceReset => {
|
||||
Event::RenderDeviceReset {
|
||||
timestamp: raw.common.timestamp
|
||||
}
|
||||
},
|
||||
|
||||
EventType::First => panic!("Unused event, EventType::First, was encountered"),
|
||||
EventType::Last => panic!("Unusable event, EventType::Last, was encountered"),
|
||||
@@ -1596,7 +1705,7 @@ impl Event {
|
||||
}} // close unsafe & match
|
||||
}
|
||||
|
||||
#[deprecated(since = "0.32.3", note = "This method has been made public accidentally")]
|
||||
#[deprecated(since = "0.33.0", note = "This method has been made public accidentally")]
|
||||
pub fn unwrap_keymod(keymod_option: Option<keyboard::Mod>) -> keyboard::Mod {
|
||||
match keymod_option {
|
||||
None => keyboard::Mod::empty(),
|
||||
|
||||
Reference in New Issue
Block a user