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 Escape,
118 ArrowLeft,
119 ArrowRight,
120 ArrowUp,
121 ArrowDown,
122 Home,
123 End,
124 PageUp,
125 PageDown,
126 Space,
127 F(u8), Unknown,
129}
130
131#[derive(Clone, Copy, Debug, PartialEq, Eq)]
132pub enum KeyEventType {
133 Down,
135 Up,
137 Unknown,
139}
140
141#[derive(Clone, Debug)]
142pub struct KeyEvent {
143 pub key: Key,
144 pub modifiers: Modifiers,
145 pub is_repeat: bool,
146 pub event_type: KeyEventType,
148 pub utf16_code_point: u16,
151}
152
153#[derive(Clone, Debug)]
154pub struct TextInputEvent {
155 pub text: String,
156}
157
158#[derive(Clone, Debug)]
159pub enum ImeEvent {
160 Start,
162 Update {
164 text: String,
165 cursor: Option<(usize, usize)>, },
167 Commit(String),
169 Cancel,
171}
172
173#[derive(Clone, Debug)]
174pub enum InputEvent {
175 Pointer(PointerEvent),
176 Key(KeyEvent),
177 Text(TextInputEvent),
178 Ime(ImeEvent),
179}