Expand description
Alter events in various ways.
This modules contains “event filters” that can change, drop or create new events. To use them,
import Filter trait and call filter() function on Option<Event>. Because filter also
returns Option<Event> you can combine multiple filters by using filter() function on
returned event.
Filters in this modules have public fields that can be used to configure their behaviour. You
can also create them with default values using new() method. If filter is not configurable,
it is implemented as function (for example deadzone()).
§Example
use gilrs::{GilrsBuilder, Filter};
use gilrs::ev::filter::{Jitter, Repeat, deadzone};
let mut gilrs = GilrsBuilder::new().with_default_filters(false).build().unwrap();
let jitter = Jitter { threshold: 0.02 };
let repeat = Repeat::new();
// Event loop
loop {
while let Some(event) = gilrs
.next_event()
.filter_ev(&jitter, &mut gilrs)
.filter_ev(&deadzone, &mut gilrs)
.filter_ev(&repeat, &mut gilrs)
{
gilrs.update(&event);
println!("{:?}", event);
}
}§Implementing custom filters
If you want to implement your own filters, you will have to implement FilterFn trait.
Do not return None if you got Some(event). If you want to discard an event, uses
EventType::Dropped. Returning None means that there are no more events to process and
will end while let loop.
§Example
Example implementations of filter that will drop all events with Unknown axis or button.
use gilrs::ev::filter::FilterFn;
use gilrs::{Gilrs, Event, EventType, Button, Axis, Filter};
struct UnknownSlayer;
impl FilterFn for UnknownSlayer {
fn filter(&self, ev: Option<Event>, _gilrs: &mut Gilrs) -> Option<Event> {
match ev {
Some(Event { event: EventType::ButtonPressed(Button::Unknown, ..), id, .. })
| Some(Event { event: EventType::ButtonReleased(Button::Unknown, ..), id, .. })
| Some(Event { event: EventType::AxisChanged(Axis::Unknown, ..), id, .. })
=> Some(Event::new(id, EventType::Dropped)),
_ => ev,
}
}
}FilterFn is also implemented for all Fn(Option<Event>, &Gilrs) -> Option<Event>, so above
example could be simplified to passing closure to filter() function.
Structs§
- Discard axis events that changed less than
threshold. - Repeats pressed keys.
Traits§
- Allow filtering events.
- Actual filter implementation.
Functions§
- Maps axis dpad events to button dpad events.
- Drops events in dead zone and remaps value to keep it in standard range.