annotate src/libmlk-core/core/event.c @ 369:1e06f871dc63

core: split action and action_stack
author David Demelier <markand@malikania.fr>
date Sun, 24 Oct 2021 17:33:12 +0200
parents 8f9937403749
children 460c78706989
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 *
314
d01e83210ca2 misc: update years
David Demelier <markand@malikania.fr>
parents: 298
diff changeset
4 * Copyright (c) 2020-2021 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 }