无头 SDL 事件处理
Headless SDL event handling
是否可以在不创建 window 的情况下使用 SDL 监听系统中的事件?
我希望我的应用程序监听系统中的事件,当按下某些快捷方式时,我将创建一个 window 实际 UI.
extern crate sdl2;
fn main() {
let ctx = sdl2::init().unwrap();
let mut event_pump = ctx.event_pump().unwrap();
event_pump.pump_events();
for event in event_pump.wait_iter() {
match event {
_ => { print!("event") }
}
}
}
如果这不可能,是否有跨平台的方式来监听全局快捷方式,或者我必须自己为每个平台重新实现它?
我有类似的情况(需要 pump/process 事件而不创建 window)并且根据我从研究 SDL2 源中了解到的情况,目前无法在没有初始化视频系统的情况下抽取事件(至少在版本 2.0.4 中)。
请参阅 http://hg.libsdl.org/SDL/file/e12c38730512/src/events/SDL_events.c(我使用的是 SDL 2.0.4),函数 SDL_PumpEvents,第 397-402 行。该代码检查视频系统是否已初始化,以及是否为该 window 系统调用 PumpEvents 方法(我想它会为 X11/Wayland/etc 调用适当的实现)。
是否可以在不创建 window 的情况下使用 SDL 监听系统中的事件? 我希望我的应用程序监听系统中的事件,当按下某些快捷方式时,我将创建一个 window 实际 UI.
extern crate sdl2;
fn main() {
let ctx = sdl2::init().unwrap();
let mut event_pump = ctx.event_pump().unwrap();
event_pump.pump_events();
for event in event_pump.wait_iter() {
match event {
_ => { print!("event") }
}
}
}
如果这不可能,是否有跨平台的方式来监听全局快捷方式,或者我必须自己为每个平台重新实现它?
我有类似的情况(需要 pump/process 事件而不创建 window)并且根据我从研究 SDL2 源中了解到的情况,目前无法在没有初始化视频系统的情况下抽取事件(至少在版本 2.0.4 中)。
请参阅 http://hg.libsdl.org/SDL/file/e12c38730512/src/events/SDL_events.c(我使用的是 SDL 2.0.4),函数 SDL_PumpEvents,第 397-402 行。该代码检查视频系统是否已初始化,以及是否为该 window 系统调用 PumpEvents 方法(我想它会为 X11/Wayland/etc 调用适当的实现)。