]> git.localhorst.tv Git - blank.git/blob - src/io/event.cpp
make gcc nag more
[blank.git] / src / io / event.cpp
1 #include "event.hpp"
2
3 #include <cctype>
4 #include <ostream>
5
6 using std::ostream;
7
8
9 namespace blank {
10
11 ostream &operator <<(ostream &out, const SDL_Event &evt) {
12         switch (evt.type) {
13 #if SDL_VERSION_ATLEAST(2, 0, 4)
14                 case SDL_AUDIODEVICEADDED:
15                         out << "audio device added: " << evt.adevice;
16                         break;
17                 case SDL_AUDIODEVICEREMOVED:
18                         out << "audio device removed: " << evt.adevice;
19                         break;
20 #endif
21                 case SDL_CONTROLLERAXISMOTION:
22                         out << "controller axis motion: " << evt.caxis;
23                         break;
24                 case SDL_CONTROLLERBUTTONDOWN:
25                         out << "controller button down: " << evt.cbutton;
26                         break;
27                 case SDL_CONTROLLERBUTTONUP:
28                         out << "controller button up: " << evt.cbutton;
29                         break;
30                 case SDL_CONTROLLERDEVICEADDED:
31                         out << "controller device added: " << evt.cdevice;
32                         break;
33                 case SDL_CONTROLLERDEVICEREMOVED:
34                         out << "controller device removed: " << evt.cdevice;
35                         break;
36                 case SDL_CONTROLLERDEVICEREMAPPED:
37                         out << "controller device remapped: " << evt.cdevice;
38                         break;
39                 case SDL_DOLLARGESTURE:
40                         out << "dollar gesture: " << evt.dgesture;
41                         break;
42                 case SDL_DOLLARRECORD:
43                         out << "dollar record: " << evt.dgesture;
44                         break;
45                 case SDL_DROPFILE:
46                         out << "drop file: " << evt.drop;
47                         break;
48                 case SDL_FINGERMOTION:
49                         out << "finger motion: " << evt.tfinger;
50                         break;
51                 case SDL_FINGERDOWN:
52                         out << "finger down: " << evt.tfinger;
53                         break;
54                 case SDL_FINGERUP:
55                         out << "finger up: " << evt.tfinger;
56                         break;
57                 case SDL_KEYDOWN:
58                         out << "key down: " << evt.key;
59                         break;
60                 case SDL_KEYUP:
61                         out << "key up: " << evt.key;
62                         break;
63                 case SDL_JOYAXISMOTION:
64                         out << "joystick axis motion: " << evt.jaxis;
65                         break;
66                 case SDL_JOYBALLMOTION:
67                         out << "joystick ball motion: " << evt.jball;
68                         break;
69                 case SDL_JOYHATMOTION:
70                         out << "joystick hat motion: " << evt.jhat;
71                         break;
72                 case SDL_JOYBUTTONDOWN:
73                         out << "joystick button down: " << evt.jbutton;
74                         break;
75                 case SDL_JOYBUTTONUP:
76                         out << "joystick button up: " << evt.jbutton;
77                         break;
78                 case SDL_JOYDEVICEADDED:
79                         out << "joystick device added: " << evt.jdevice;
80                         break;
81                 case SDL_JOYDEVICEREMOVED:
82                         out << "joystick device removed: " << evt.jdevice;
83                         break;
84                 case SDL_MOUSEMOTION:
85                         out << "mouse motion: " << evt.motion;
86                         break;
87                 case SDL_MOUSEBUTTONDOWN:
88                         out << "mouse button down: " << evt.button;
89                         break;
90                 case SDL_MOUSEBUTTONUP:
91                         out << "mouse button up: " << evt.button;
92                         break;
93                 case SDL_MOUSEWHEEL:
94                         out << "mouse wheel: " << evt.wheel;
95                         break;
96                 case SDL_MULTIGESTURE:
97                         out << "multi gesture: " << evt.mgesture;
98                         break;
99                 case SDL_QUIT:
100                         out << "quit: " << evt.quit;
101                         break;
102                 case SDL_SYSWMEVENT:
103                         out << "sys wm: " << evt.syswm;
104                         break;
105                 case SDL_TEXTEDITING:
106                         out << "text editing: " << evt.edit;
107                         break;
108                 case SDL_TEXTINPUT:
109                         out << "text input: " << evt.text;
110                         break;
111                 case SDL_USEREVENT:
112                         out << "user: " << evt.user;
113                         break;
114                 case SDL_WINDOWEVENT:
115                         out << "window: " << evt.window;
116                         break;
117                 default:
118                         out << "unknown";
119                         break;
120         }
121         return out;
122 }
123
124 ostream &operator <<(ostream &out, const SDL_WindowEvent &evt) {
125         switch (evt.event) {
126                 case SDL_WINDOWEVENT_SHOWN:
127                         out << "shown, window ID: " << evt.windowID;
128                         break;
129                 case SDL_WINDOWEVENT_HIDDEN:
130                         out << "hidden, window ID: " << evt.windowID;
131                         break;
132                 case SDL_WINDOWEVENT_EXPOSED:
133                         out << "exposed, window ID: " << evt.windowID;
134                         break;
135                 case SDL_WINDOWEVENT_MOVED:
136                         out << "moved, window ID: " << evt.windowID
137                                 << ", position: " << evt.data1 << ' ' << evt.data2;
138                         break;
139                 case SDL_WINDOWEVENT_RESIZED:
140                         out << "resized, window ID: " << evt.windowID
141                                 << ", size: " << evt.data1 << 'x' << evt.data2;
142                         break;
143                 case SDL_WINDOWEVENT_SIZE_CHANGED:
144                         out << "size changed, window ID: " << evt.windowID
145                                 << ", size: " << evt.data1 << 'x' << evt.data2;
146                         break;
147                 case SDL_WINDOWEVENT_MINIMIZED:
148                         out << "minimized, window ID: " << evt.windowID;
149                         break;
150                 case SDL_WINDOWEVENT_MAXIMIZED:
151                         out << "maximized, window ID: " << evt.windowID;
152                         break;
153                 case SDL_WINDOWEVENT_RESTORED:
154                         out << "restored, window ID: " << evt.windowID;
155                         break;
156                 case SDL_WINDOWEVENT_ENTER:
157                         out << "mouse entered, window ID: " << evt.windowID;
158                         break;
159                 case SDL_WINDOWEVENT_LEAVE:
160                         out << "mouse left, window ID: " << evt.windowID;
161                         break;
162                 case SDL_WINDOWEVENT_FOCUS_GAINED:
163                         out << "focus gained, window ID: " << evt.windowID;
164                         break;
165                 case SDL_WINDOWEVENT_FOCUS_LOST:
166                         out << "focus lost, window ID: " << evt.windowID;
167                         break;
168                 case SDL_WINDOWEVENT_CLOSE:
169                         out << "closed, window ID: " << evt.windowID;
170                         break;
171                 default:
172                         out << "unknown";
173                         break;
174         }
175         return out;
176 }
177
178 ostream &operator <<(ostream &out, const SDL_KeyboardEvent &evt) {
179         out << "window ID: " << evt.windowID
180                 << ", state: " << (evt.state == SDL_PRESSED ? "pressed" : "released")
181                 << ", repeat: " << (evt.repeat ? "yes" : "no")
182                 << ", keysym: " << evt.keysym;
183         return out;
184 }
185
186 ostream &operator <<(ostream &out, const SDL_Keysym &keysym) {
187         out << "scancode: " << int(keysym.scancode)
188                 << ", sym: " << int(keysym.sym)
189                 << " (\"" << SDL_GetKeyName(keysym.sym) << "\")";
190         if (keysym.mod) {
191                 out << ", mod:";
192                 if (keysym.mod & KMOD_LSHIFT) {
193                         out << " LSHIFT";
194                 }
195                 if (keysym.mod & KMOD_RSHIFT) {
196                         out << " RSHIFT";
197                 }
198                 if (keysym.mod & KMOD_LCTRL) {
199                         out << " LCTRL";
200                 }
201                 if (keysym.mod & KMOD_RCTRL) {
202                         out << " RCTRL";
203                 }
204                 if (keysym.mod & KMOD_LALT) {
205                         out << " LALT";
206                 }
207                 if (keysym.mod & KMOD_RALT) {
208                         out << " RALT";
209                 }
210                 if (keysym.mod & KMOD_LGUI) {
211                         out << " LSUPER";
212                 }
213                 if (keysym.mod & KMOD_RGUI) {
214                         out << " RSUPER";
215                 }
216                 if (keysym.mod & KMOD_NUM) {
217                         out << " NUM";
218                 }
219                 if (keysym.mod & KMOD_CAPS) {
220                         out << " CAPS";
221                 }
222                 if (keysym.mod & KMOD_MODE) {
223                         out << " ALTGR";
224                 }
225         }
226         return out;
227 }
228
229 ostream &operator <<(ostream &out, const SDL_TextEditingEvent &evt) {
230         out << "window ID: " << evt.windowID
231                 << ", text: \"" << evt.text
232                 << "\", start: " << evt.start
233                 << ", length: " << evt.length;
234         return out;
235 }
236
237 ostream &operator <<(ostream &out, const SDL_TextInputEvent &evt) {
238         out << "window ID: " << evt.windowID
239                 << ", text: \"" << evt.text << '"';
240         return out;
241 }
242
243 ostream &operator <<(ostream &out, const SDL_MouseMotionEvent &evt) {
244         out << "window ID: " << evt.windowID
245                 << ", mouse ID: " << evt.which
246                 << ", position: " << evt.x << ' ' << evt.y
247                 << ", delta: " << evt.xrel << ' ' << evt.yrel;
248         if (evt.state) {
249                 out << ", buttons:";
250                 if (evt.state & SDL_BUTTON_LMASK) {
251                         out << " left";
252                 }
253                 if (evt.state & SDL_BUTTON_MMASK) {
254                         out << " middle";
255                 }
256                 if (evt.state & SDL_BUTTON_RMASK) {
257                         out << " right";
258                 }
259                 if (evt.state & SDL_BUTTON_X1MASK) {
260                         out << " X1";
261                 }
262                 if (evt.state & SDL_BUTTON_X2MASK) {
263                         out << " X2";
264                 }
265         }
266         return out;
267 }
268
269 ostream &operator <<(ostream &out, const SDL_MouseButtonEvent &evt) {
270         out << "window ID: " << evt.windowID
271                 << ", mouse ID: " << evt.which
272                 << ", button: ";
273         switch (evt.button) {
274                 case SDL_BUTTON_LEFT:
275                         out << "left";
276                         break;
277                 case SDL_BUTTON_MIDDLE:
278                         out << "middle";
279                         break;
280                 case SDL_BUTTON_RIGHT:
281                         out << "right";
282                         break;
283                 case SDL_BUTTON_X1:
284                         out << "X1";
285                         break;
286                 case SDL_BUTTON_X2:
287                         out << "X2";
288                         break;
289                 default:
290                         out << int(evt.button);
291                         break;
292         }
293         out << ", state: " << (evt.state == SDL_PRESSED ? "pressed" : "released")
294                 << ", clicks: " << int(evt.clicks)
295                 << ", position: " << evt.x << ' ' << evt.y;
296         return out;
297 }
298
299 ostream &operator <<(ostream &out, const SDL_MouseWheelEvent &evt) {
300         out << "window ID: " << evt.windowID
301                 << ", mouse ID: " << evt.which
302                 << ", delta: " << evt.x << ' ' << evt.y
303 #if SDL_VERSION_ATLEAST(2, 0, 4)
304                 << ", direction: " << (evt.direction == SDL_MOUSEWHEEL_NORMAL ? "normal" : "flipped")
305 #endif
306                 ;
307         return out;
308 }
309
310 ostream &operator <<(ostream &out, const SDL_JoyAxisEvent &evt) {
311         out << "joystick ID: " << evt.which
312                 << ", axis ID: " << int(evt.axis)
313                 << ", value: " << (float(evt.value) / 32768.0f);
314         return out;
315 }
316
317 ostream &operator <<(ostream &out, const SDL_JoyBallEvent &evt) {
318         out << "joystick ID: " << evt.which
319                 << ", ball ID: " << int(evt.ball)
320                 << ", delta: " << evt.xrel << ' ' << evt.yrel;
321         return out;
322 }
323
324 ostream &operator <<(ostream &out, const SDL_JoyHatEvent &evt) {
325         out << "joystick ID: " << evt.which
326                 << ", hat ID: " << int(evt.hat)
327                 << ", value: ";
328         switch (evt.value) {
329                 case SDL_HAT_LEFTUP:
330                         out << "left up";
331                         break;
332                 case SDL_HAT_UP:
333                         out << "up";
334                         break;
335                 case SDL_HAT_RIGHTUP:
336                         out << "right up";
337                         break;
338                 case SDL_HAT_LEFT:
339                         out << "left";
340                         break;
341                 case SDL_HAT_CENTERED:
342                         out << "center";
343                         break;
344                 case SDL_HAT_RIGHT:
345                         out << "right";
346                         break;
347                 case SDL_HAT_LEFTDOWN:
348                         out << "left down";
349                         break;
350                 case SDL_HAT_DOWN:
351                         out << "down";
352                         break;
353                 case SDL_HAT_RIGHTDOWN:
354                         out << "right down";
355                         break;
356                 default:
357                         out << "unknown";
358                         break;
359         }
360         return out;
361 }
362
363 ostream &operator <<(ostream &out, const SDL_JoyButtonEvent &evt) {
364         out << "joystick ID: " << evt.which
365                 << ", button ID: " << int(evt.button)
366                 << ", state: " << (evt.state == SDL_PRESSED ? "pressed" : "released");
367         return out;
368 }
369
370 ostream &operator <<(ostream &out, const SDL_JoyDeviceEvent &evt) {
371         out << "joystick ID: " << evt.which;
372         return out;
373 }
374
375 ostream &operator <<(ostream &out, const SDL_ControllerAxisEvent &evt) {
376         out << "controller ID: " << evt.which
377                 << ", axis ID: " << int(evt.axis)
378                 << ", value: " << (float(evt.value) / 32768.0f);
379         return out;
380 }
381
382 ostream &operator <<(ostream &out, const SDL_ControllerButtonEvent &evt) {
383         out << "controller ID: " << evt.which
384                 << ", button ID: " << int(evt.button)
385                 << ", state: " << (evt.state == SDL_PRESSED ? "pressed" : "released");
386         return out;
387 }
388
389 ostream &operator <<(ostream &out, const SDL_ControllerDeviceEvent &evt) {
390         out << "controller ID: " << evt.which;
391         return out;
392 }
393
394 #if SDL_VERSION_ATLEAST(2, 0, 4)
395 ostream &operator <<(ostream &out, const SDL_AudioDeviceEvent &evt) {
396         out << "device ID: " << evt.which
397                 << ", capture: " << (evt.iscapture ? "yes" : "no");
398         return out;
399 }
400 #endif
401
402 ostream &operator <<(ostream &out, const SDL_QuitEvent &) {
403         out << "quit";
404         return out;
405 }
406
407 ostream &operator <<(ostream &out, const SDL_UserEvent &evt) {
408         out << "window ID: " << evt.windowID
409                 << ", code: " << evt.code
410                 << ", data 1: " << evt.data1
411                 << ", data 2: " << evt.data2;
412         return out;
413 }
414
415 ostream &operator <<(ostream &out, const SDL_SysWMEvent &evt) {
416         if (evt.msg) {
417                 out << "with message";
418         } else {
419                 out << "without message";
420         }
421         return out;
422 }
423
424 ostream &operator <<(ostream &out, const SDL_TouchFingerEvent &evt) {
425         out << "device ID: " << evt.touchId
426                 << ", finger ID: " << evt.fingerId
427                 << ", position: " << evt.x << ' ' << evt.y
428                 << ", delta: " << evt.dx << ' ' << evt.dy
429                 << ", pressure: " << evt.pressure;
430         return out;
431 }
432
433 ostream &operator <<(ostream &out, const SDL_MultiGestureEvent &evt) {
434         out << "device ID: " << evt.touchId
435                 << ", theta: " << evt.dTheta
436                 << ", distance: " << evt.dDist
437                 << ", position: " << evt.x << ' ' << evt.y
438                 << ", fingers: " << evt.numFingers;
439         return out;
440 }
441
442 ostream &operator <<(ostream &out, const SDL_DollarGestureEvent &evt) {
443         out << "device ID: " << evt.touchId
444                 << ", gesture ID: " << evt.gestureId
445                 << ", fingers: " << evt.numFingers
446                 << ", error: " << evt.error
447                 << ", position: " << evt.x << ' ' << evt.y;
448         return out;
449 }
450
451 ostream &operator <<(ostream &out, const SDL_DropEvent &evt) {
452         out << "file: " << evt.file;
453         return out;
454 }
455
456 }