New crate for input event data: `event_types`
I noticed that Rust has a lot of competing frameworks for GUIs. Many of them define their own event types, and many of them don't get it quite right imo. So I made a small, (hopefully) re-usable and idiomatic crate with some user input event types to be adopted in your GUI framework.
use euclid::num::Zero;
use keyboard_types::Modifiers;
use event_types::event_data::PointerDown;
use event_types::*;
// Your library can construct event data
let pointer_data = PointerProperties::builder()
.coordinates(Coordinates::zero())
.held_buttons(PointerButton::Primary)
.id(PointerId(0))
.pointer_type(PointerType::Mouse)
.is_primary(true)
.build();
let event_data = PointerDown::new(pointer_data, Modifiers::SHIFT, PointerButton::Primary, 1);
// So that your users can get info about input events
dbg!(event_data.button_pressed());
dbg!(event_data.pointer());
dbg!(event_data.modifiers());
It currently includes some pointer event data (which can be used to represent mouse, stylus and touch events in a general way), wheel event data, and keyboard event data. You would wrap these event data in your own Event type.
why i think my crate is good:
- Meaningful types, nothing stringly typed (or intly typed)
- Data organized in a way that makes sense (instead of putting everything in 1 flat structure like JS)
- Existing crates leveraged to solve common problems (e.g. \
euclid\\for geometry primitives) - As I was writing it, I consulted the W3C event specs. They've captured a lot of knowledge on what kinds of data we need to track for a flexible solution.
- blazin fast (especially the enums 🚀🚀 ofc)
The crate is based on some code I previously wrote for Dioxus, an amazing GUI framework.