freya_core/events/
name.rs1#[derive(Clone, Copy, PartialEq, 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
46impl Eq for EventName {}
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) -> Vec<Self> {
96 let mut events = Vec::new();
97 match self {
98 Self::MouseUp => events.extend([Self::GlobalMouseUp, Self::CaptureGlobalMouseUp]),
99 Self::MouseDown => events.push(Self::GlobalMouseDown),
100 Self::MouseMove => events.extend([Self::GlobalMouseMove, Self::CaptureGlobalMouseMove]),
101
102 Self::KeyDown => events.push(Self::GlobalKeyDown),
103 Self::KeyUp => events.push(Self::GlobalKeyUp),
104
105 Self::GlobalFileHover => events.push(Self::GlobalFileHover),
106 Self::GlobalFileHoverCancelled => events.push(Self::GlobalFileHoverCancelled),
107 _ => {}
108 }
109 events
110 }
111
112 fn get_derived_events(&self) -> Vec<Self> {
113 let mut events = Vec::new();
114
115 events.push(*self);
116
117 match self {
118 Self::MouseMove | Self::TouchMove => events.extend([Self::PointerEnter]),
119 Self::MouseDown | Self::TouchStart => events.extend([Self::PointerDown]),
120 Self::MouseUp | Self::TouchEnd => events.extend([Self::PointerPress]),
121 _ => {}
122 }
123
124 events
125 }
126
127 fn get_cancellable_events(&self) -> Vec<Self> {
128 let mut events = Vec::new();
129
130 events.push(*self);
131
132 match self {
133 Self::KeyDown => events.extend([Self::GlobalKeyDown]),
134 Self::KeyUp => events.extend([Self::GlobalKeyUp]),
135
136 Self::MouseUp | Self::PointerPress => events.extend([Self::GlobalMouseUp]),
137 Self::MouseDown | Self::PointerDown => events.extend([Self::GlobalMouseDown]),
138
139 Self::CaptureGlobalMouseMove => {
140 events.extend([Self::MouseMove, Self::PointerEnter, Self::GlobalMouseMove])
141 }
142 Self::CaptureGlobalMouseUp => {
143 events.extend([Self::MouseUp, Self::PointerPress, Self::GlobalMouseUp])
144 }
145
146 _ => {}
147 }
148
149 events
150 }
151
152 fn is_global(&self) -> bool {
153 matches!(
154 self,
155 Self::GlobalKeyDown
156 | Self::GlobalKeyUp
157 | Self::GlobalMouseUp
158 | Self::GlobalMouseMove
159 | Self::GlobalFileHover
160 | Self::GlobalFileHoverCancelled
161 )
162 }
163
164 fn is_moved(&self) -> bool {
165 matches!(
166 &self,
167 Self::MouseMove
168 | Self::TouchMove
169 | Self::CaptureGlobalMouseMove
170 | Self::GlobalMouseMove
171 )
172 }
173
174 fn does_bubble(&self) -> bool {
175 !self.is_moved()
176 && !self.is_enter()
177 && !self.is_left()
178 && !self.is_global()
179 && !self.is_capture()
180 }
181
182 fn does_go_through_solid(&self) -> bool {
183 false
185 }
186
187 fn is_enter(&self) -> bool {
188 matches!(&self, Self::PointerEnter)
189 }
190
191 fn is_pressed(&self) -> bool {
192 matches!(self, Self::MouseDown | Self::PointerDown)
193 }
194
195 fn is_released(&self) -> bool {
196 matches!(&self, Self::PointerPress)
197 }
198
199 fn new_leave() -> Self {
200 Self::PointerLeave
201 }
202}