#winit #input #helper #state #cache

winit_input_helper

Processes winit events, allowing input state to be queried at any time

10 releases

✓ Uses Rust 2018 edition

0.4.0 Jan 11, 2020
0.4.0-alpha6 Jan 4, 2020
0.4.0-alpha4 Oct 18, 2019
0.4.0-alpha3 Aug 24, 2019
0.1.2 Oct 26, 2018

#25 in Operating systems

Download history 6/week @ 2019-10-12 62/week @ 2019-10-19 105/week @ 2019-10-26 216/week @ 2019-11-02 44/week @ 2019-11-09 75/week @ 2019-11-16 28/week @ 2019-11-23 29/week @ 2019-11-30 106/week @ 2019-12-07 27/week @ 2019-12-14 23/week @ 2019-12-21 28/week @ 2019-12-28 84/week @ 2020-01-04 102/week @ 2020-01-11 61/week @ 2020-01-18

278 downloads per month
Used in 5 crates

MIT license

18KB
279 lines

Winit Input Helper

Build Status dependency status Crates.io Docs

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| {
        // Pass every event to the WindowInputHelper.
        // It will return true when the last event has been processed and it is time to run your application logic.
        if input.update(event) {
            // query keypresses this update
            if input.key_pressed(VirtualKeyCode::A) {
                println!("The 'A' key was pressed on the keyboard");
            }

            if input.key_released(VirtualKeyCode::Q) || input.quit() {
                *control_flow = ControlFlow::Exit;
                return;
            }

            // query the change in mouse this update
            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());
            }

            // You are expected to control your own timing within this block.
            // Usually via rendering with vsync.
            // render();
        }
    });
}

Dependencies

~1.3–2.2MB
~44K SLoC