#回调 #Winit #事件 #助手 #扁平化 #函数 #逻辑

winit_event_helper

使用回调函数简化Winit事件处理

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次下载

MIT 协议

67KB
1.5K SLoC

winit_event_helper

Latest Version API

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