Expand description
Frame-oriented input state built on ui-events.
This crate provides simple state containers to make input handling easier in
immediate-mode or frame-based UIs. Instead of reacting to each event
individually, you feed pointer and keyboard events into the state, query the
current and per-frame information during your update, and then call
InputState::clear_frame at the end of the frame.
§What it provides:
PrimaryPointerState: current pointer state, coalesced and predicted motion, per-frame button transitions, and helpers for motion in physical/logical units.KeyboardState: current modifiers, keys down, and per-frame key transitions.InputState: a convenience container bundling both states and a per-frame clear.
§Typical lifecycle per frame:
- Receive backend events and convert them to
ui-eventstypes. - Update
PrimaryPointerStateandKeyboardStatewith the events. - Read state during your UI update (e.g. check just pressed, motion, etc.).
- Call
InputState::clear_framebefore the next frame.
§Example (sketch):
use ui_input_state::{InputState, PrimaryPointerState, KeyboardState};
use ui_events::pointer::PointerEvent;
use ui_events::keyboard::KeyboardEvent;
let mut input = InputState::default();
// 1-2) In your event loop, feed events into state
fn on_pointer_event(input: &mut InputState, e: PointerEvent) {
input.primary_pointer.process_pointer_event(e);
}
fn on_keyboard_event(input: &mut InputState, e: KeyboardEvent) {
input.keyboard.process_keyboard_event(e);
}
// 3) During your update pass, read state
fn update(input: &InputState) {
if input.primary_pointer.is_primary_just_pressed() {
// Begin a drag, for example
}
if input.keyboard.key_str_just_pressed("z") && input.keyboard.modifiers.ctrl() {
// Ctrl+Z
}
}
// 4) At the end of the frame, clear per-frame transitions
fn end_frame(input: &mut InputState) { input.clear_frame(); }§Coordinates and units
Pointer positions are stored in physical pixels with a Y-down axis, as in
ui-events. Use PrimaryPointerState::current_logical_position and
PrimaryPointerState::logical_motion to work in logical units.
§Features
std(enabled by default): Use the Rust standard library.libm: Enableui-events/libmtransitively forno_stdenvironments.
Structs§
- Input
State - A stateful view of the input data for a frame, rather than processing it event-by-event.
- Keyboard
State - A stateful view of the primary pointer.
- Primary
Pointer State - A stateful view of the primary pointer.