9个版本 (4个破坏性版本)
0.5.0 | 2023年2月11日 |
---|---|
0.4.2 | 2023年1月21日 |
0.3.1 | 2022年10月25日 |
0.2.1 | 2022年9月30日 |
0.1.0 | 2022年8月15日 |
#736 in 数学
每月36次下载
67KB
1.5K SLoC
winit_event_helper
winit_event_helper
是一个用于扁平化Winit事件处理的crate,使用回调函数而不占用主循环。
使用方法
winit_event_helper
包含一个EventHelper
结构体,该结构体处理所有回调和各类杂项。
将事件传递给EventHelper::update
,当它返回true
时运行你的应用程序逻辑。
您可以使用Callbacks
结构体添加特定winit
事件的回调。
示例
use winit::event_loop::{ControlFlow, EventLoop};
use winit::window::WindowBuilder;
use winit_event_helper::*;
struct Data {
counter: usize,
}
fn main() {
let event_loop = EventLoop::new();
let _window = WindowBuilder::new().build(&event_loop).unwrap();
let mut eh = EventHelper::new(Data { counter: 0 });
let mut callbacks = Callbacks::<Data>::empty();
// is called whenever one of the given inputs was just pressed
callbacks
.window
.inputs
.just_pressed_all([GenericInput::from(MouseButton::Left), KeyCode::Space.into()], |eh| {
eh.counter += 1
});
event_loop.run(move |event, _, control_flow| {
// feed the events to the [EventHelper] struct
// returns true when it receives [Event::MainEventsCleared]
if !eh.update(&callbacks, &event) {
return;
}
// exits the application when the key combination CTRL + ESC has been released
if eh.data.window.inputs.just_released_combination([KeyCode::Escape], Modifiers::CTRL) {
*control_flow = ControlFlow::Exit;
}
println!("{}", eh.counter);
// do stuff
})
}
依赖关系
~3–17MB
~172K SLoC