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
20 pub shift: bool,
27 pub alt: bool,
28 pub ctrl: bool,
29
30 pub position: Position,
32}
33
34#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Deserialize, Serialize)]
36pub enum MouseEventType {
37 Press,
39 Release,
41 Motion,
43}
44
45impl MouseEvent {
46 pub fn new() -> Self {
47 let event = MouseEvent {
48 event_type: MouseEventType::Motion,
49 left: false,
50 right: false,
51 middle: false,
52 wheel_up: false,
53 wheel_down: false,
54 shift: false,
55 alt: false,
56 ctrl: false,
57 position: Position::new(0, 0),
58 };
59 event
60 }
61 pub fn new_buttonless_motion(position: Position) -> Self {
62 let event = MouseEvent {
63 event_type: MouseEventType::Motion,
64 left: false,
65 right: false,
66 middle: false,
67 wheel_up: false,
68 wheel_down: false,
69 shift: false,
70 alt: false,
71 ctrl: false,
72 position,
73 };
74 event
75 }
76 pub fn new_left_press_event(position: Position) -> Self {
77 let event = MouseEvent {
78 event_type: MouseEventType::Press,
79 left: true,
80 right: false,
81 middle: false,
82 wheel_up: false,
83 wheel_down: false,
84 shift: false,
85 alt: false,
86 ctrl: false,
87 position,
88 };
89 event
90 }
91 pub fn new_right_press_event(position: Position) -> Self {
92 let event = MouseEvent {
93 event_type: MouseEventType::Press,
94 left: false,
95 right: true,
96 middle: false,
97 wheel_up: false,
98 wheel_down: false,
99 shift: false,
100 alt: false,
101 ctrl: false,
102 position,
103 };
104 event
105 }
106 pub fn new_middle_press_event(position: Position) -> Self {
107 let event = MouseEvent {
108 event_type: MouseEventType::Press,
109 left: false,
110 right: false,
111 middle: true,
112 wheel_up: false,
113 wheel_down: false,
114 shift: false,
115 alt: false,
116 ctrl: false,
117 position,
118 };
119 event
120 }
121 pub fn new_middle_release_event(position: Position) -> Self {
122 let event = MouseEvent {
123 event_type: MouseEventType::Release,
124 left: false,
125 right: false,
126 middle: true,
127 wheel_up: false,
128 wheel_down: false,
129 shift: false,
130 alt: false,
131 ctrl: false,
132 position,
133 };
134 event
135 }
136 pub fn new_left_release_event(position: Position) -> Self {
137 let event = MouseEvent {
138 event_type: MouseEventType::Release,
139 left: true,
140 right: false,
141 middle: false,
142 wheel_up: false,
143 wheel_down: false,
144 shift: false,
145 alt: false,
146 ctrl: false,
147 position,
148 };
149 event
150 }
151 pub fn new_left_motion_event(position: Position) -> Self {
152 let event = MouseEvent {
153 event_type: MouseEventType::Motion,
154 left: true,
155 right: false,
156 middle: false,
157 wheel_up: false,
158 wheel_down: false,
159 shift: false,
160 alt: false,
161 ctrl: false,
162 position,
163 };
164 event
165 }
166 pub fn new_right_release_event(position: Position) -> Self {
167 let event = MouseEvent {
168 event_type: MouseEventType::Release,
169 left: false,
170 right: true,
171 middle: false,
172 wheel_up: false,
173 wheel_down: false,
174 shift: false,
175 alt: false,
176 ctrl: false,
177 position,
178 };
179 event
180 }
181 pub fn new_right_motion_event(position: Position) -> Self {
182 let event = MouseEvent {
183 event_type: MouseEventType::Motion,
184 left: false,
185 right: true,
186 middle: false,
187 wheel_up: false,
188 wheel_down: false,
189 shift: false,
190 alt: false,
191 ctrl: false,
192 position,
193 };
194 event
195 }
196 pub fn new_middle_motion_event(position: Position) -> Self {
197 let event = MouseEvent {
198 event_type: MouseEventType::Motion,
199 left: false,
200 right: false,
201 middle: true,
202 wheel_up: false,
203 wheel_down: false,
204 shift: false,
205 alt: false,
206 ctrl: false,
207 position,
208 };
209 event
210 }
211 pub fn new_left_press_with_alt_event(position: Position) -> Self {
212 let event = MouseEvent {
213 event_type: MouseEventType::Press,
214 left: true,
215 right: false,
216 middle: false,
217 wheel_up: false,
218 wheel_down: false,
219 shift: false,
220 alt: true,
221 ctrl: false,
222 position,
223 };
224 event
225 }
226 pub fn new_right_press_with_alt_event(position: Position) -> Self {
227 let event = MouseEvent {
228 event_type: MouseEventType::Press,
229 left: false,
230 right: true,
231 middle: false,
232 wheel_up: false,
233 wheel_down: false,
234 shift: false,
235 alt: true,
236 ctrl: false,
237 position,
238 };
239 event
240 }
241 pub fn new_left_press_with_ctrl_event(position: Position) -> Self {
242 let event = MouseEvent {
243 event_type: MouseEventType::Press,
244 left: true,
245 right: false,
246 middle: false,
247 wheel_up: false,
248 wheel_down: false,
249 shift: false,
250 alt: false,
251 ctrl: true,
252 position,
253 };
254 event
255 }
256 pub fn new_left_motion_with_ctrl_event(position: Position) -> Self {
257 let event = MouseEvent {
258 event_type: MouseEventType::Motion,
259 left: true,
260 right: false,
261 middle: false,
262 wheel_up: false,
263 wheel_down: false,
264 shift: false,
265 alt: false,
266 ctrl: true,
267 position,
268 };
269 event
270 }
271 pub fn new_left_release_with_ctrl_event(position: Position) -> Self {
272 let event = MouseEvent {
273 event_type: MouseEventType::Release,
274 left: true,
275 right: false,
276 middle: false,
277 wheel_up: false,
278 wheel_down: false,
279 shift: false,
280 alt: false,
281 ctrl: true,
282 position,
283 };
284 event
285 }
286 pub fn new_left_motion_with_alt_event(position: Position) -> Self {
287 let event = MouseEvent {
288 event_type: MouseEventType::Motion,
289 left: true,
290 right: false,
291 middle: false,
292 wheel_up: false,
293 wheel_down: false,
294 shift: false,
295 alt: true,
296 ctrl: false,
297 position,
298 };
299 event
300 }
301 pub fn new_scroll_up_event(position: Position) -> Self {
302 let event = MouseEvent {
303 event_type: MouseEventType::Press,
304 left: false,
305 right: false,
306 middle: false,
307 wheel_up: true,
308 wheel_down: false,
309 shift: false,
310 alt: false,
311 ctrl: false,
312 position,
313 };
314 event
315 }
316 pub fn new_scroll_down_event(position: Position) -> Self {
317 let event = MouseEvent {
318 event_type: MouseEventType::Press,
319 left: false,
320 right: false,
321 middle: false,
322 wheel_up: false,
323 wheel_down: true,
324 shift: false,
325 alt: false,
326 ctrl: false,
327 position,
328 };
329 event
330 }
331 pub fn new_ctrl_scroll_up_event(position: Position) -> Self {
332 let event = MouseEvent {
333 event_type: MouseEventType::Press,
334 left: false,
335 right: false,
336 middle: false,
337 wheel_up: true,
338 wheel_down: false,
339 shift: false,
340 alt: false,
341 ctrl: true,
342 position,
343 };
344 event
345 }
346 pub fn new_ctrl_scroll_down_event(position: Position) -> Self {
347 let event = MouseEvent {
348 event_type: MouseEventType::Press,
349 left: false,
350 right: false,
351 middle: false,
352 wheel_up: false,
353 wheel_down: true,
354 shift: false,
355 alt: false,
356 ctrl: true,
357 position,
358 };
359 event
360 }
361}
362
363impl Default for MouseEvent {
364 fn default() -> Self {
365 MouseEvent::new()
366 }
367}