pixelab_core/
event.rs

1use crate::{PixelabError, Point};
2use std::fmt::Formatter;
3
4#[derive(Clone, Debug)]
5pub enum TouchPad {
6    Press(Point),
7    Motion(Point),
8    Release(Point),
9}
10
11#[derive(Clone, Debug)]
12pub enum Keyboard {
13    Press(char),
14    Release(char),
15}
16
17#[derive(Clone, Debug)]
18pub enum Mouse {
19    Press(u8),
20    Motion(Point),
21    Release(u8),
22}
23
24#[derive(Clone, Debug)]
25pub enum Event {
26    TouchPad(TouchPad),
27    Keyboard(Keyboard),
28    Mouse(Mouse),
29    KeyValue(&'static str, u32),
30    Message(&'static str),
31    Timer(u8),
32}
33impl core::fmt::Display for Event {
34    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
35        write!(f, "{:?}", self)
36    }
37}
38
39pub trait InputDevice {
40    fn init(&mut self) -> Result<(), PixelabError>;
41    fn read(&mut self) -> Result<Event, PixelabError>;
42}
43
44pub struct EventReader {
45    pub readers: Vec<Box<dyn InputDevice>>,
46    pub events: Vec<Event>,
47}
48impl EventReader {
49    pub fn new() -> Self {
50        Self {
51            readers: vec![],
52            events: vec![],
53        }
54    }
55    pub fn add_reader(
56        &mut self,
57        mut reader: impl InputDevice + 'static,
58    ) -> Result<(), PixelabError> {
59        reader.init()?;
60        self.readers.push(Box::new(reader));
61        Ok(())
62    }
63    pub fn read_all(&mut self) -> Result<(), PixelabError> {
64        for reader in self.readers.iter_mut() {
65            match reader.read() {
66                Ok(event) => self.events.push(event),
67                Err(_) => {}
68            }
69        }
70        Ok(())
71    }
72    pub fn get(&mut self) -> Result<Event, PixelabError> {
73        match self.events.pop() {
74            Some(event) => Ok(event),
75            None => Err(PixelabError::EmptyEvent),
76        }
77    }
78    pub fn send(&mut self, event: Event) {
79        self.events.push(event)
80    }
81}