Crates.io | winit_event_helper |
lib.rs | winit_event_helper |
version | 0.5.0 |
source | src |
created_at | 2022-08-15 17:52:25.506572 |
updated_at | 2023-02-11 14:36:01.956155 |
description | Simplified winit event handling using callback functions. |
homepage | |
repository | https://github.com/IvoteSligte/winit_event_helper/ |
max_upload_size | |
id | 646072 |
size | 69,786 |
winit_event_helper
is a crate for flattened winit event handling
using callback functions
without taking over the main loop.
winit_event_helper
comes with the EventHelper
struct, which handles all the callbacks
and various miscellaneous things.
Pass your events to EventHelper::update
and run your application logic when it returns true
.
You can add callbacks for specific winit
events with the Callbacks
struct.
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
})
}