Winit Input Helper
Processes and stores winit events, allowing input state to be queried at any time.
How to use
Each event is passed to the WinitInputHelper
via the update
method.
The current input state can then be accessed via methods such as key_pressed
, key_released
, key_held
, mouse
, mouse_diff
etc.
To see all available methods look at docs.rs
use winit::event::VirtualKeyCode;
use winit::event_loop::{ControlFlow, EventLoop};
use winit::window::WindowBuilder;
use winit_input_helper::WinitInputHelper;
fn main() {
let mut input = WinitInputHelper::new();
let event_loop = EventLoop::new();
let _window = WindowBuilder::new().build(&event_loop).unwrap();
event_loop.run(move |event, _, control_flow| {
if input.update(&event) {
if input.key_pressed_os(VirtualKeyCode::A) {
println!("The 'A' key was pressed on the keyboard (OS repeating)");
}
if input.key_pressed(VirtualKeyCode::A) {
println!("The 'A' key was pressed on the keyboard");
}
if input.key_released(VirtualKeyCode::Q) || input.close_requested() || input.destroyed() {
*control_flow = ControlFlow::Exit;
return;
}
let mouse_diff = input.mouse_diff();
if mouse_diff != (0.0, 0.0) {
println!("The mouse diff is: {:?}", mouse_diff);
println!("The mouse position is: {:?}", input.mouse());
}
}
});
}
Publishing a new version
In order to avoid forcing the user to enable the default winit backends, winit_input_helper sets its winit dependency to default-features = false
.
This complicates the publishing procedure a little because winit cannot compile without any backends enabled.
So to publish we run: cargo publish --features winit/default