freya_core/events/
name.rs1#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
2pub enum EventName {
3 MouseUp,
5 MouseDown,
6 MouseMove,
7
8 PointerPress,
10 PointerDown,
11 PointerEnter,
12 PointerLeave,
13
14 KeyDown,
16 KeyUp,
17
18 TouchCancel,
20 TouchStart,
21 TouchMove,
22 TouchEnd,
23
24 GlobalMouseMove,
25 GlobalMouseUp,
26 GlobalMouseDown,
27
28 GlobalKeyDown,
29 GlobalKeyUp,
30
31 GlobalFileHover,
32 GlobalFileHoverCancelled,
33
34 CaptureGlobalMouseMove,
35 CaptureGlobalMouseUp,
36
37 Wheel,
38
39 Sized,
40
41 FileDrop,
42
43 ImePreedit,
44}
45
46use std::collections::HashSet;
47
48impl PartialOrd for EventName {
49 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
50 Some(self.cmp(other))
51 }
52}
53
54impl Ord for EventName {
55 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
56 match self {
57 e if e.is_capture() => std::cmp::Ordering::Less,
59 e if e.is_left() => std::cmp::Ordering::Less,
61 e => {
62 if e == other {
63 std::cmp::Ordering::Equal
64 } else {
65 std::cmp::Ordering::Greater
66 }
67 }
68 }
69 }
70}
71
72impl EventName {
73 pub fn is_capture(&self) -> bool {
75 matches!(
76 &self,
77 Self::CaptureGlobalMouseMove | Self::CaptureGlobalMouseUp
78 )
79 }
80
81 pub fn is_left(&self) -> bool {
82 matches!(&self, Self::PointerLeave)
83 }
84
85 pub fn is_down(&self) -> bool {
86 matches!(self, Self::PointerDown)
87 }
88
89 pub fn is_press(&self) -> bool {
90 matches!(self, Self::PointerPress)
91 }
92}
93
94impl ragnarok::NameOfEvent for EventName {
95 fn get_global_events(&self) -> HashSet<Self> {
96 match self {
97 Self::MouseUp => HashSet::from([Self::GlobalMouseUp, Self::CaptureGlobalMouseUp]),
98 Self::MouseDown => HashSet::from([Self::GlobalMouseDown]),
99 Self::MouseMove => HashSet::from([Self::GlobalMouseMove, Self::CaptureGlobalMouseMove]),
100
101 Self::KeyDown => HashSet::from([Self::GlobalKeyDown]),
102 Self::KeyUp => HashSet::from([Self::GlobalKeyUp]),
103
104 Self::GlobalFileHover => HashSet::from([Self::GlobalFileHover]),
105 Self::GlobalFileHoverCancelled => HashSet::from([Self::GlobalFileHoverCancelled]),
106 _ => HashSet::new(),
107 }
108 }
109
110 fn get_derived_events(&self) -> HashSet<Self> {
111 let mut events = HashSet::new();
112
113 events.insert(*self);
114
115 match self {
116 Self::MouseMove | Self::TouchMove => {
117 events.insert(Self::PointerEnter);
118 }
119 Self::MouseDown | Self::TouchStart => {
120 events.insert(Self::PointerDown);
121 }
122 Self::MouseUp | Self::TouchEnd => {
123 events.insert(Self::PointerPress);
124 }
125 _ => {}
126 }
127
128 events
129 }
130
131 fn get_cancellable_events(&self) -> HashSet<Self> {
132 let mut events = HashSet::new();
133
134 events.insert(*self);
135
136 match self {
137 Self::KeyDown => {
138 events.insert(Self::GlobalKeyDown);
139 }
140 Self::KeyUp => {
141 events.insert(Self::GlobalKeyUp);
142 }
143 Self::MouseUp => events.extend([Self::PointerPress, Self::GlobalMouseUp]),
144 Self::PointerPress => events.extend([Self::MouseUp, Self::GlobalMouseUp]),
145 Self::MouseDown => events.extend([Self::PointerDown, Self::GlobalMouseDown]),
146 Self::PointerDown => events.extend([Self::MouseDown, Self::GlobalMouseDown]),
147 Self::CaptureGlobalMouseMove => {
148 events.extend([Self::MouseMove, Self::PointerEnter, Self::GlobalMouseMove]);
149 }
150 Self::CaptureGlobalMouseUp => {
151 events.extend([Self::MouseUp, Self::PointerPress, Self::GlobalMouseUp]);
152 }
153
154 _ => {}
155 }
156
157 events
158 }
159
160 fn is_global(&self) -> bool {
161 matches!(
162 self,
163 Self::GlobalKeyDown
164 | Self::GlobalKeyUp
165 | Self::GlobalMouseUp
166 | Self::GlobalMouseMove
167 | Self::GlobalFileHover
168 | Self::GlobalFileHoverCancelled
169 )
170 }
171
172 fn is_moved(&self) -> bool {
173 matches!(
174 &self,
175 Self::MouseMove
176 | Self::TouchMove
177 | Self::CaptureGlobalMouseMove
178 | Self::GlobalMouseMove
179 )
180 }
181
182 fn does_bubble(&self) -> bool {
183 !self.is_moved()
184 && !self.is_enter()
185 && !self.is_left()
186 && !self.is_global()
187 && !self.is_capture()
188 }
189
190 fn does_go_through_solid(&self) -> bool {
191 false
193 }
194
195 fn is_enter(&self) -> bool {
196 matches!(&self, Self::PointerEnter)
197 }
198
199 fn is_pressed(&self) -> bool {
200 matches!(self, Self::MouseDown | Self::PointerDown)
201 }
202
203 fn is_released(&self) -> bool {
204 matches!(&self, Self::PointerPress)
205 }
206
207 fn new_leave() -> Self {
208 Self::PointerLeave
209 }
210}