1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
use crate::{AxisEvent, ButtonEvent, Device, Event, EventType, GenericEvent}; #[derive(Clone, Copy, Debug)] pub enum DeviceEvent { Axis(AxisEvent), Button(ButtonEvent), } impl DeviceEvent { pub fn from_event(device: &Device, event: Event) -> Self { match event.type_() { EventType::Axis => Self::Axis(AxisEvent::new( device.axis_mapping_at(event.number()), false, event.time(), event.value(), )), EventType::AxisSynthetic => Self::Axis(AxisEvent::new( device.axis_mapping_at(event.number()), true, event.time(), event.value(), )), EventType::Button => Self::Button(ButtonEvent::new( device.button_mapping_at(event.number()), false, event.time(), event.value(), )), EventType::ButtonSynthetic => Self::Button(ButtonEvent::new( device.button_mapping_at(event.number()), true, event.time(), event.value(), )), } } } impl GenericEvent for DeviceEvent { fn is_real(&self) -> bool { match self { Self::Axis(ref event) => event.is_real(), Self::Button(ref event) => event.is_real(), } } fn is_synthetic(&self) -> bool { match self { Self::Axis(ref event) => event.is_synthetic(), Self::Button(ref event) => event.is_synthetic(), } } fn time(&self) -> u32 { match self { Self::Axis(ref event) => event.time(), Self::Button(ref event) => event.time(), } } fn value(&self) -> i16 { match self { Self::Axis(ref event) => event.value(), Self::Button(ref event) => event.value(), } } }