Mercurial > molko
annotate libmlk-core/mlk/core/event.c @ 431:8f59201dc76b
core: cleanup hierarchy
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 15 Oct 2022 20:23:14 +0200 |
parents | src/libmlk-core/core/event.c@460c78706989 |
children | dfc65293d984 |
rev | line source |
---|---|
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * event.c -- event management |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
378
460c78706989
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr> |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <SDL.h> |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include "event.h" |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 /* Maintain with enum key constants in key.h */ |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 static const struct { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 SDL_Keycode key; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 enum key value; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 } keymap[] = { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 { SDLK_RETURN, KEY_ENTER }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 { SDLK_ESCAPE, KEY_ESCAPE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 { SDLK_BACKSPACE, KEY_BACKSPACE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 { SDLK_TAB, KEY_TAB }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 { SDLK_SPACE, KEY_SPACE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 { SDLK_EXCLAIM, KEY_EXCLAIM }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 { SDLK_QUOTEDBL, KEY_DOUBLE_QUOTE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 { SDLK_HASH, KEY_HASH }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 { SDLK_PERCENT, KEY_PERCENT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 { SDLK_DOLLAR, KEY_DOLLAR }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 { SDLK_AMPERSAND, KEY_AMPERSAND }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 { SDLK_QUOTE, KEY_QUOTE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 { SDLK_LEFTPAREN, KEY_LEFT_PAREN }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 { SDLK_RIGHTPAREN, KEY_RIGHT_PAREN }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 { SDLK_ASTERISK, KEY_ASTERISK }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 { SDLK_PLUS, KEY_PLUS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 { SDLK_COMMA, KEY_COMMA }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 { SDLK_MINUS, KEY_MINUS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 { SDLK_PERIOD, KEY_PERIOD }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 { SDLK_SLASH, KEY_SLASH }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 { SDLK_0, KEY_0 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 { SDLK_1, KEY_1 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 { SDLK_2, KEY_2 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 { SDLK_3, KEY_3 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 { SDLK_4, KEY_4 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 { SDLK_5, KEY_5 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 { SDLK_6, KEY_6 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 { SDLK_7, KEY_7 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 { SDLK_8, KEY_8 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { SDLK_9, KEY_9 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 { SDLK_COLON, KEY_COLON }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 { SDLK_SEMICOLON, KEY_SEMICOLON }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 { SDLK_LESS, KEY_LESS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 { SDLK_EQUALS, KEY_EQUALS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 { SDLK_GREATER, KEY_GREATER }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 { SDLK_QUESTION, KEY_QUESTION }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 { SDLK_AT, KEY_AT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 { SDLK_LEFTBRACKET, KEY_LEFT_BRACKET }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 { SDLK_BACKSLASH, KEY_BACKSLASH }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 { SDLK_RIGHTBRACKET, KEY_RIGHT_BRACKET }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 { SDLK_CARET, KEY_CARET }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { SDLK_UNDERSCORE, KEY_UNDERSCORE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { SDLK_BACKQUOTE, KEY_BACKQUOTE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { SDLK_a, KEY_a }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 { SDLK_b, KEY_b }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 { SDLK_c, KEY_c }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 { SDLK_d, KEY_d }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 { SDLK_e, KEY_e }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 { SDLK_f, KEY_f }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 { SDLK_g, KEY_g }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 { SDLK_h, KEY_h }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 { SDLK_i, KEY_i }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 { SDLK_j, KEY_j }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 { SDLK_k, KEY_k }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 { SDLK_l, KEY_l }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 { SDLK_m, KEY_m }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 { SDLK_n, KEY_n }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 { SDLK_o, KEY_o }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 { SDLK_p, KEY_p }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 { SDLK_q, KEY_q }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 { SDLK_r, KEY_r }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 { SDLK_s, KEY_s }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 { SDLK_t, KEY_t }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 { SDLK_u, KEY_u }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 { SDLK_v, KEY_v }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 { SDLK_w, KEY_w }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 { SDLK_x, KEY_x }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 { SDLK_y, KEY_y }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 { SDLK_z, KEY_z }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 { SDLK_CAPSLOCK, KEY_CAPSLOCK }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 { SDLK_F1, KEY_F1 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 { SDLK_F2, KEY_F2 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 { SDLK_F3, KEY_F3 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 { SDLK_F4, KEY_F4 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 { SDLK_F5, KEY_F5 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 { SDLK_F6, KEY_F6 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 { SDLK_F7, KEY_F7 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 { SDLK_F8, KEY_F8 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 { SDLK_F9, KEY_F9 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 { SDLK_F10, KEY_F10 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 { SDLK_F11, KEY_F11 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 { SDLK_F12, KEY_F12 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 { SDLK_F13, KEY_F13 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 { SDLK_F14, KEY_F14 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 { SDLK_F15, KEY_F15 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 { SDLK_F16, KEY_F16 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 { SDLK_F17, KEY_F17 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 { SDLK_F18, KEY_F18 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 { SDLK_F19, KEY_F19 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 { SDLK_F20, KEY_F20 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 { SDLK_F21, KEY_F21 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 { SDLK_F22, KEY_F22 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 { SDLK_F23, KEY_F23 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 { SDLK_F24, KEY_F24 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 { SDLK_PRINTSCREEN, KEY_PRINTSCREEN }, |
253
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
123 { SDLK_SCROLLLOCK, KEY_SCROLL_LOCK }, |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 { SDLK_PAUSE, KEY_PAUSE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 { SDLK_INSERT, KEY_INSERT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 { SDLK_HOME, KEY_HOME }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 { SDLK_PAGEUP, KEY_PAGEUP }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 { SDLK_DELETE, KEY_DELETE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 { SDLK_END, KEY_END }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 { SDLK_PAGEDOWN, KEY_PAGEDOWN }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 { SDLK_RIGHT, KEY_RIGHT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 { SDLK_LEFT, KEY_LEFT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 { SDLK_DOWN, KEY_DOWN }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 { SDLK_UP, KEY_UP }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 { SDLK_KP_DIVIDE, KEY_KP_DIVIDE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 { SDLK_KP_MULTIPLY, KEY_KP_MULTIPLY }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 { SDLK_KP_MINUS, KEY_KP_MINUS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 { SDLK_KP_PLUS, KEY_KP_PLUS }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 { SDLK_KP_ENTER, KEY_KP_ENTER }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 { SDLK_KP_1, KEY_KP_1 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 { SDLK_KP_2, KEY_KP_2 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 { SDLK_KP_3, KEY_KP_3 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 { SDLK_KP_4, KEY_KP_4 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 { SDLK_KP_5, KEY_KP_5 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 { SDLK_KP_6, KEY_KP_6 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 { SDLK_KP_7, KEY_KP_7 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 { SDLK_KP_8, KEY_KP_8 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 { SDLK_KP_9, KEY_KP_9 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 { SDLK_KP_0, KEY_KP_0 }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 { SDLK_KP_PERIOD, KEY_KP_PERIOD }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 { SDLK_KP_COMMA, KEY_KP_COMMA }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 { SDLK_MENU, KEY_MENU }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 { SDLK_MUTE, KEY_MUTE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 { SDLK_VOLUMEUP, KEY_VOLUME_UP }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 { SDLK_VOLUMEDOWN, KEY_VOLUME_DOWN }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 { SDLK_LCTRL, KEY_LCTRL }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 { SDLK_LSHIFT, KEY_LSHIFT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 { SDLK_LALT, KEY_LALT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 { SDLK_LGUI, KEY_LSUPER }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 { SDLK_RCTRL, KEY_RCTRL }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 { SDLK_RSHIFT, KEY_RSHIFT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 { SDLK_RALT, KEY_RALT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 { SDLK_RGUI, KEY_RSUPER }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 { 0, -1 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 }; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 /* Maintain with enum mouse_button constants in mouse.h */ |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 static const struct { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 int key; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 enum mouse_button value; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 } buttons[] = { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 { SDL_BUTTON_LEFT, MOUSE_BUTTON_LEFT }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 { SDL_BUTTON_MIDDLE, MOUSE_BUTTON_MIDDLE }, |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 { SDL_BUTTON_RIGHT, MOUSE_BUTTON_RIGHT }, |
253
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
175 { -1, MOUSE_BUTTON_NONE } |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 }; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 static void |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 convert_key(const SDL_Event *event, union event *ev) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 ev->type = event->type == SDL_KEYDOWN ? EVENT_KEYDOWN : EVENT_KEYUP; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 ev->key.key = KEY_UNKNOWN; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 for (size_t i = 0; keymap[i].key != 0; ++i) { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 if (keymap[i].key == event->key.keysym.sym) { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 ev->key.key = keymap[i].value; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 break; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 static void |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 convert_mouse(const SDL_Event *event, union event *ev) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 ev->type = EVENT_MOUSE; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 ev->mouse.buttons = 0; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 ev->mouse.x = event->motion.x; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 ev->mouse.y = event->motion.y; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 if (event->motion.state & SDL_BUTTON_LMASK) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 ev->mouse.buttons |= MOUSE_BUTTON_LEFT; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 if (event->motion.state & SDL_BUTTON_MMASK) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 ev->mouse.buttons |= MOUSE_BUTTON_MIDDLE; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 if (event->motion.state & SDL_BUTTON_RMASK) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 ev->mouse.buttons |= MOUSE_BUTTON_RIGHT; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 static void |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 convert_click(const SDL_Event *event, union event *ev) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 ev->type = event->type == SDL_MOUSEBUTTONDOWN ? EVENT_CLICKDOWN : EVENT_CLICKUP; |
253
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
212 ev->click.button = MOUSE_BUTTON_NONE; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 ev->click.x = event->button.x; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 ev->click.y = event->button.y; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
253
diff
changeset
|
215 ev->click.clicks = event->button.clicks; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 |
253
c4da052c0def
core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
217 for (size_t i = 0; buttons[i].value != MOUSE_BUTTON_NONE; ++i) { |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 if (buttons[i].key == event->button.button) { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 ev->click.button = buttons[i].value; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 break; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
225 int |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 event_poll(union event *ev) |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 SDL_Event event; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 /* |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 * Loop until we find an event we want to report, we skip unneeded |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 * ones. |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 */ |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 while (SDL_PollEvent(&event)) { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 switch (event.type) { |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 case SDL_QUIT: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 ev->type = EVENT_QUIT; |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
238 return 1; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 case SDL_KEYDOWN: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 case SDL_KEYUP: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 convert_key(&event, ev); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
242 return 1; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 case SDL_MOUSEMOTION: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 convert_mouse(&event, ev); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
245 return 1; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 case SDL_MOUSEBUTTONDOWN: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 case SDL_MOUSEBUTTONUP: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 convert_click(&event, ev); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
249 return 1; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 default: |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 continue; |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 } |
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
255 return 0; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 } |