1use serde::{Deserialize, Serialize};
2
3use crate::position::Position;
4
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
6pub struct MouseEvent {
9 pub event_type: MouseEventType,
12
13 pub left: bool,
15 pub right: bool,
16 pub middle: bool,
17 pub wheel_up: bool,
18 pub wheel_down: bool,
19 #[serde(default)]
20 pub wheel_left: bool,
21 #[serde(default)]
22 pub wheel_right: bool,
23
24 pub shift: bool,
31 pub alt: bool,
32 pub ctrl: bool,
33
34 pub position: Position,
36}
37
38#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Deserialize, Serialize)]
40pub enum MouseEventType {
41 Press,
43 Release,
45 Motion,
47}
48
49impl MouseEvent {
50 pub fn new() -> Self {
51 let event = MouseEvent {
52 event_type: MouseEventType::Motion,
53 left: false,
54 right: false,
55 middle: false,
56 wheel_up: false,
57 wheel_down: false,
58 wheel_left: false,
59 wheel_right: false,
60 shift: false,
61 alt: false,
62 ctrl: false,
63 position: Position::new(0, 0),
64 };
65 event
66 }
67 pub fn new_buttonless_motion(position: Position) -> Self {
68 let event = MouseEvent {
69 event_type: MouseEventType::Motion,
70 left: false,
71 right: false,
72 middle: false,
73 wheel_up: false,
74 wheel_down: false,
75 wheel_left: false,
76 wheel_right: false,
77 shift: false,
78 alt: false,
79 ctrl: false,
80 position,
81 };
82 event
83 }
84 pub fn new_left_press_event(position: Position) -> Self {
85 let event = MouseEvent {
86 event_type: MouseEventType::Press,
87 left: true,
88 right: false,
89 middle: false,
90 wheel_up: false,
91 wheel_down: false,
92 wheel_left: false,
93 wheel_right: false,
94 shift: false,
95 alt: false,
96 ctrl: false,
97 position,
98 };
99 event
100 }
101 pub fn new_right_press_event(position: Position) -> Self {
102 let event = MouseEvent {
103 event_type: MouseEventType::Press,
104 left: false,
105 right: true,
106 middle: false,
107 wheel_up: false,
108 wheel_down: false,
109 wheel_left: false,
110 wheel_right: false,
111 shift: false,
112 alt: false,
113 ctrl: false,
114 position,
115 };
116 event
117 }
118 pub fn new_middle_press_event(position: Position) -> Self {
119 let event = MouseEvent {
120 event_type: MouseEventType::Press,
121 left: false,
122 right: false,
123 middle: true,
124 wheel_up: false,
125 wheel_down: false,
126 wheel_left: false,
127 wheel_right: false,
128 shift: false,
129 alt: false,
130 ctrl: false,
131 position,
132 };
133 event
134 }
135 pub fn new_middle_release_event(position: Position) -> Self {
136 let event = MouseEvent {
137 event_type: MouseEventType::Release,
138 left: false,
139 right: false,
140 middle: true,
141 wheel_up: false,
142 wheel_down: false,
143 wheel_left: false,
144 wheel_right: false,
145 shift: false,
146 alt: false,
147 ctrl: false,
148 position,
149 };
150 event
151 }
152 pub fn new_left_release_event(position: Position) -> Self {
153 let event = MouseEvent {
154 event_type: MouseEventType::Release,
155 left: true,
156 right: false,
157 middle: false,
158 wheel_up: false,
159 wheel_down: false,
160 wheel_left: false,
161 wheel_right: false,
162 shift: false,
163 alt: false,
164 ctrl: false,
165 position,
166 };
167 event
168 }
169 pub fn new_left_motion_event(position: Position) -> Self {
170 let event = MouseEvent {
171 event_type: MouseEventType::Motion,
172 left: true,
173 right: false,
174 middle: false,
175 wheel_up: false,
176 wheel_down: false,
177 wheel_left: false,
178 wheel_right: false,
179 shift: false,
180 alt: false,
181 ctrl: false,
182 position,
183 };
184 event
185 }
186 pub fn new_right_release_event(position: Position) -> Self {
187 let event = MouseEvent {
188 event_type: MouseEventType::Release,
189 left: false,
190 right: true,
191 middle: false,
192 wheel_up: false,
193 wheel_down: false,
194 wheel_left: false,
195 wheel_right: false,
196 shift: false,
197 alt: false,
198 ctrl: false,
199 position,
200 };
201 event
202 }
203 pub fn new_right_motion_event(position: Position) -> Self {
204 let event = MouseEvent {
205 event_type: MouseEventType::Motion,
206 left: false,
207 right: true,
208 middle: false,
209 wheel_up: false,
210 wheel_down: false,
211 wheel_left: false,
212 wheel_right: false,
213 shift: false,
214 alt: false,
215 ctrl: false,
216 position,
217 };
218 event
219 }
220 pub fn new_middle_motion_event(position: Position) -> Self {
221 let event = MouseEvent {
222 event_type: MouseEventType::Motion,
223 left: false,
224 right: false,
225 middle: true,
226 wheel_up: false,
227 wheel_down: false,
228 wheel_left: false,
229 wheel_right: false,
230 shift: false,
231 alt: false,
232 ctrl: false,
233 position,
234 };
235 event
236 }
237 pub fn new_left_press_with_alt_event(position: Position) -> Self {
238 let event = MouseEvent {
239 event_type: MouseEventType::Press,
240 left: true,
241 right: false,
242 middle: false,
243 wheel_up: false,
244 wheel_down: false,
245 wheel_left: false,
246 wheel_right: false,
247 shift: false,
248 alt: true,
249 ctrl: false,
250 position,
251 };
252 event
253 }
254 pub fn new_right_press_with_alt_event(position: Position) -> Self {
255 let event = MouseEvent {
256 event_type: MouseEventType::Press,
257 left: false,
258 right: true,
259 middle: false,
260 wheel_up: false,
261 wheel_down: false,
262 wheel_left: false,
263 wheel_right: false,
264 shift: false,
265 alt: true,
266 ctrl: false,
267 position,
268 };
269 event
270 }
271 pub fn new_left_press_with_ctrl_event(position: Position) -> Self {
272 let event = MouseEvent {
273 event_type: MouseEventType::Press,
274 left: true,
275 right: false,
276 middle: false,
277 wheel_up: false,
278 wheel_down: false,
279 wheel_left: false,
280 wheel_right: false,
281 shift: false,
282 alt: false,
283 ctrl: true,
284 position,
285 };
286 event
287 }
288 pub fn new_left_motion_with_ctrl_event(position: Position) -> Self {
289 let event = MouseEvent {
290 event_type: MouseEventType::Motion,
291 left: true,
292 right: false,
293 middle: false,
294 wheel_up: false,
295 wheel_down: false,
296 wheel_left: false,
297 wheel_right: false,
298 shift: false,
299 alt: false,
300 ctrl: true,
301 position,
302 };
303 event
304 }
305 pub fn new_left_release_with_ctrl_event(position: Position) -> Self {
306 let event = MouseEvent {
307 event_type: MouseEventType::Release,
308 left: true,
309 right: false,
310 middle: false,
311 wheel_up: false,
312 wheel_down: false,
313 wheel_left: false,
314 wheel_right: false,
315 shift: false,
316 alt: false,
317 ctrl: true,
318 position,
319 };
320 event
321 }
322 pub fn new_left_motion_with_alt_event(position: Position) -> Self {
323 let event = MouseEvent {
324 event_type: MouseEventType::Motion,
325 left: true,
326 right: false,
327 middle: false,
328 wheel_up: false,
329 wheel_down: false,
330 wheel_left: false,
331 wheel_right: false,
332 shift: false,
333 alt: true,
334 ctrl: false,
335 position,
336 };
337 event
338 }
339 pub fn new_scroll_up_event(position: Position) -> Self {
340 let event = MouseEvent {
341 event_type: MouseEventType::Press,
342 left: false,
343 right: false,
344 middle: false,
345 wheel_up: true,
346 wheel_down: false,
347 wheel_left: false,
348 wheel_right: false,
349 shift: false,
350 alt: false,
351 ctrl: false,
352 position,
353 };
354 event
355 }
356 pub fn new_scroll_down_event(position: Position) -> Self {
357 let event = MouseEvent {
358 event_type: MouseEventType::Press,
359 left: false,
360 right: false,
361 middle: false,
362 wheel_up: false,
363 wheel_down: true,
364 wheel_left: false,
365 wheel_right: false,
366 shift: false,
367 alt: false,
368 ctrl: false,
369 position,
370 };
371 event
372 }
373 pub fn new_alt_scroll_up_event(position: Position) -> Self {
374 let event = MouseEvent {
375 event_type: MouseEventType::Press,
376 left: false,
377 right: false,
378 middle: false,
379 wheel_up: true,
380 wheel_down: false,
381 wheel_left: false,
382 wheel_right: false,
383 shift: false,
384 alt: true,
385 ctrl: false,
386 position,
387 };
388 event
389 }
390 pub fn new_alt_scroll_down_event(position: Position) -> Self {
391 let event = MouseEvent {
392 event_type: MouseEventType::Press,
393 left: false,
394 right: false,
395 middle: false,
396 wheel_up: false,
397 wheel_down: true,
398 wheel_left: false,
399 wheel_right: false,
400 shift: false,
401 alt: true,
402 ctrl: false,
403 position,
404 };
405 event
406 }
407 pub fn new_ctrl_scroll_up_event(position: Position) -> Self {
408 let event = MouseEvent {
409 event_type: MouseEventType::Press,
410 left: false,
411 right: false,
412 middle: false,
413 wheel_up: true,
414 wheel_down: false,
415 wheel_left: false,
416 wheel_right: false,
417 shift: false,
418 alt: false,
419 ctrl: true,
420 position,
421 };
422 event
423 }
424 pub fn new_ctrl_scroll_down_event(position: Position) -> Self {
425 let event = MouseEvent {
426 event_type: MouseEventType::Press,
427 left: false,
428 right: false,
429 middle: false,
430 wheel_up: false,
431 wheel_down: true,
432 wheel_left: false,
433 wheel_right: false,
434 shift: false,
435 alt: false,
436 ctrl: true,
437 position,
438 };
439 event
440 }
441 pub fn new_scroll_left_event(position: Position) -> Self {
442 MouseEvent {
443 event_type: MouseEventType::Press,
444 left: false,
445 right: false,
446 middle: false,
447 wheel_up: false,
448 wheel_down: false,
449 wheel_left: true,
450 wheel_right: false,
451 shift: false,
452 alt: false,
453 ctrl: false,
454 position,
455 }
456 }
457 pub fn new_scroll_right_event(position: Position) -> Self {
458 MouseEvent {
459 event_type: MouseEventType::Press,
460 left: false,
461 right: false,
462 middle: false,
463 wheel_up: false,
464 wheel_down: false,
465 wheel_left: false,
466 wheel_right: true,
467 shift: false,
468 alt: false,
469 ctrl: false,
470 position,
471 }
472 }
473}
474
475impl Default for MouseEvent {
476 fn default() -> Self {
477 MouseEvent::new()
478 }
479}