1use crate::Vec2;
2use std::cell::Cell;
3use std::rc::Rc;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
6pub struct PointerId(pub u64);
7
8#[derive(Clone, Copy, Debug, PartialEq, Eq)]
9pub enum PointerKind {
10 Mouse,
11 Touch,
12 Pen,
13}
14
15#[derive(Clone, Copy, Debug)]
16pub enum PointerButton {
17 Primary, Secondary, Tertiary, }
21
22#[derive(Clone, Copy, Debug, PartialEq, Eq)]
23pub enum PointerEventPass {
24 Initial,
27 Main,
31 Final,
34}
35
36#[derive(Clone, Copy, Debug)]
37pub enum PointerEventKind {
38 Down(PointerButton),
39 Up(PointerButton),
40 Move,
41 Cancel,
42 Enter,
43 Leave,
44}
45
46#[derive(Clone, Debug)]
47pub struct PointerEvent {
48 pub id: PointerId,
49 pub kind: PointerKind,
50 pub event: PointerEventKind,
51 pub position: Vec2,
53 pub origin: Vec2,
55 pub pressure: f32,
56 pub modifiers: Modifiers,
57 pub consumed: Rc<Cell<bool>>,
60}
61
62impl PointerEvent {
63 pub fn new(
64 id: PointerId,
65 kind: PointerKind,
66 event: PointerEventKind,
67 position: Vec2,
68 pressure: f32,
69 modifiers: Modifiers,
70 ) -> Self {
71 Self {
72 id,
73 kind,
74 event,
75 position,
76 origin: Vec2::ZERO,
77 pressure,
78 modifiers,
79 consumed: Rc::new(Cell::new(false)),
80 }
81 }
82
83 pub fn position_in_window(&self) -> Vec2 {
85 self.position + self.origin
86 }
87
88 pub fn consume(&self) {
92 self.consumed.set(true);
93 }
94
95 pub fn is_consumed(&self) -> bool {
97 self.consumed.get()
98 }
99}
100
101#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
102pub struct Modifiers {
103 pub shift: bool,
104 pub ctrl: bool,
105 pub alt: bool,
106 pub meta: bool, pub command: bool, }
109
110#[derive(Clone, Debug, PartialEq, Eq, Hash)]
111pub enum Key {
112 Character(char),
113 Enter,
114 Tab,
115 Backspace,
116 Delete,
117 Insert,
118 Escape,
119 ArrowLeft,
120 ArrowRight,
121 ArrowUp,
122 ArrowDown,
123 Home,
124 End,
125 PageUp,
126 PageDown,
127 Space,
128 F(u8), Unknown,
130}
131
132#[derive(Clone, Copy, Debug, PartialEq, Eq)]
133pub enum KeyEventType {
134 Down,
136 Up,
138 Unknown,
140}
141
142#[derive(Clone, Debug)]
143pub struct KeyEvent {
144 pub key: Key,
145 pub modifiers: Modifiers,
146 pub is_repeat: bool,
147 pub event_type: KeyEventType,
149 pub utf16_code_point: u16,
152}
153
154#[derive(Clone, Debug)]
155pub struct TextInputEvent {
156 pub text: String,
157}
158
159#[derive(Clone, Debug)]
160pub enum ImeEvent {
161 Start,
163 Update {
165 text: String,
166 cursor: Option<(usize, usize)>, },
168 Commit(String),
170 Cancel,
172}
173
174#[derive(Clone, Debug)]
175pub enum InputEvent {
176 Pointer(PointerEvent),
177 Key(KeyEvent),
178 Text(TextInputEvent),
179 Ime(ImeEvent),
180}