无头SDL事件处理

时间:2016-05-20 15:54:17

标签: rust sdl sdl-2

是否可以在不创建窗口的情况下使用SDL监听系统中的事件? 我希望我的应用程序能够监听系统中的事件,并且当按下某些快捷方式时,我将创建一个具有实际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") }
        }
    }
}

如果无法做到这一点,是否有跨平台的方式来监听全局快捷方式,或者我必须自己为每个平台重新实现它?

1 个答案:

答案 0 :(得分:1)

我有类似的情况(需要在没有创建窗口的情况下泵送/处理事件),而且根据我从SDL2源的研究中理解,目前无法在没有视频系统初始化的情况下泵送事件(至少在版本2.0.4中) )。

请参阅http://hg.libsdl.org/SDL/file/e12c38730512/src/events/SDL_events.c(我使用过SDL 2.0.4),功能 SDL_PumpEvents ,第397-402行。该代码检查视频系统是否已初始化,以及是否为该窗口系统调用 PumpEvents 方法(我认为它调用X11 / Wayland / etc的相应实现)。