1use serde::{Deserialize, Serialize};
2
3use crate::key;
4
5#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
7pub enum Event {
8 Press {
10 keymap_index: u16,
12 },
13 Release {
15 keymap_index: u16,
17 },
18 VirtualKeyPress {
20 key_output: key::KeyOutput,
22 },
23 VirtualKeyRelease {
25 key_output: key::KeyOutput,
27 },
28}
29
30#[derive(Debug, Clone, Copy, PartialEq)]
32pub struct PressedKey<S> {
33 pub keymap_index: u16,
35 pub key_state: S,
37}
38
39impl<Ctx, Ev, S: crate::key::KeyState<Context = Ctx, Event = Ev>> PressedKey<S> {
40 pub fn handle_event(
42 &mut self,
43 context: &Ctx,
44 event: crate::key::Event<Ev>,
45 ) -> crate::key::KeyEvents<Ev> {
46 self.key_state
47 .handle_event(context, self.keymap_index, event)
48 }
49
50 pub fn key_output(&self) -> Option<key::KeyOutput> {
52 self.key_state.key_output()
53 }
54}
55
56#[derive(Debug, Clone, Copy)]
58pub enum PressedInput<PK> {
59 Key(PressedKey<PK>),
61 Virtual(key::KeyOutput),
63}
64
65impl<PK> PressedInput<PK> {
66 pub fn pressed_key(key_state: PK, keymap_index: u16) -> Self {
68 Self::Key(PressedKey {
69 keymap_index,
70 key_state,
71 })
72 }
73}