annotate libmlk-core/mlk/core/event.c @ 614:281608524dd1

misc: implement dark/light theming
author David Demelier <markand@malikania.fr>
date Sun, 20 Aug 2023 14:45:10 +0200
parents f76cada0bbb2
children 3930234ab1f5
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 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 443
diff changeset
4 * Copyright (c) 2020-2023 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
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
19 #include <string.h>
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
20
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <SDL.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 #include "event.h"
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 /* Maintain with enum key constants in key.h */
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 static const struct {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 SDL_Keycode key;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
28 enum mlk_key value;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 } keymap[] = {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
30 { SDLK_RETURN, MLK_KEY_ENTER },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
31 { SDLK_ESCAPE, MLK_KEY_ESCAPE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
32 { SDLK_BACKSPACE, MLK_KEY_BACKSPACE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
33 { SDLK_TAB, MLK_KEY_TAB },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
34 { SDLK_SPACE, MLK_KEY_SPACE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
35 { SDLK_EXCLAIM, MLK_KEY_EXCLAIM },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
36 { SDLK_QUOTEDBL, MLK_KEY_DOUBLE_QUOTE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
37 { SDLK_HASH, MLK_KEY_HASH },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
38 { SDLK_PERCENT, MLK_KEY_PERCENT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
39 { SDLK_DOLLAR, MLK_KEY_DOLLAR },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
40 { SDLK_AMPERSAND, MLK_KEY_AMPERSAND },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
41 { SDLK_QUOTE, MLK_KEY_QUOTE },
528
95792046d3d2 core: doxygenize maths
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
42 { SDLK_LEFTPAREN, MLK_KEY_LPAREN },
95792046d3d2 core: doxygenize maths
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
43 { SDLK_RIGHTPAREN, MLK_KEY_RPAREN },
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
44 { SDLK_ASTERISK, MLK_KEY_ASTERISK },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
45 { SDLK_PLUS, MLK_KEY_PLUS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
46 { SDLK_COMMA, MLK_KEY_COMMA },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
47 { SDLK_MINUS, MLK_KEY_MINUS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
48 { SDLK_PERIOD, MLK_KEY_PERIOD },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
49 { SDLK_SLASH, MLK_KEY_SLASH },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
50 { SDLK_0, MLK_KEY_0 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
51 { SDLK_1, MLK_KEY_1 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
52 { SDLK_2, MLK_KEY_2 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
53 { SDLK_3, MLK_KEY_3 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
54 { SDLK_4, MLK_KEY_4 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
55 { SDLK_5, MLK_KEY_5 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
56 { SDLK_6, MLK_KEY_6 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
57 { SDLK_7, MLK_KEY_7 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
58 { SDLK_8, MLK_KEY_8 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
59 { SDLK_9, MLK_KEY_9 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
60 { SDLK_COLON, MLK_KEY_COLON },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
61 { SDLK_SEMICOLON, MLK_KEY_SEMICOLON },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
62 { SDLK_LESS, MLK_KEY_LESS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
63 { SDLK_EQUALS, MLK_KEY_EQUALS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
64 { SDLK_GREATER, MLK_KEY_GREATER },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
65 { SDLK_QUESTION, MLK_KEY_QUESTION },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
66 { SDLK_AT, MLK_KEY_AT },
528
95792046d3d2 core: doxygenize maths
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
67 { SDLK_LEFTBRACKET, MLK_KEY_LBRACKET },
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
68 { SDLK_BACKSLASH, MLK_KEY_BACKSLASH },
528
95792046d3d2 core: doxygenize maths
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
69 { SDLK_RIGHTBRACKET, MLK_KEY_RBRACKET },
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
70 { SDLK_CARET, MLK_KEY_CARET },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
71 { SDLK_UNDERSCORE, MLK_KEY_UNDERSCORE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
72 { SDLK_BACKQUOTE, MLK_KEY_BACKQUOTE },
527
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
73 { SDLK_a, MLK_KEY_A },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
74 { SDLK_b, MLK_KEY_B },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
75 { SDLK_c, MLK_KEY_C },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
76 { SDLK_d, MLK_KEY_D },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
77 { SDLK_e, MLK_KEY_E },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
78 { SDLK_f, MLK_KEY_F },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
79 { SDLK_g, MLK_KEY_G },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
80 { SDLK_h, MLK_KEY_H },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
81 { SDLK_i, MLK_KEY_I },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
82 { SDLK_j, MLK_KEY_J },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
83 { SDLK_k, MLK_KEY_K },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
84 { SDLK_l, MLK_KEY_L },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
85 { SDLK_m, MLK_KEY_M },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
86 { SDLK_n, MLK_KEY_N },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
87 { SDLK_o, MLK_KEY_O },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
88 { SDLK_p, MLK_KEY_P },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
89 { SDLK_q, MLK_KEY_Q },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
90 { SDLK_r, MLK_KEY_R },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
91 { SDLK_s, MLK_KEY_S },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
92 { SDLK_t, MLK_KEY_T },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
93 { SDLK_u, MLK_KEY_U },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
94 { SDLK_v, MLK_KEY_V },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
95 { SDLK_w, MLK_KEY_W },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
96 { SDLK_x, MLK_KEY_X },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
97 { SDLK_y, MLK_KEY_Y },
3d004b068744 core: doxygenize key
David Demelier <markand@malikania.fr>
parents: 450
diff changeset
98 { SDLK_z, MLK_KEY_Z },
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
99 { SDLK_CAPSLOCK, MLK_KEY_CAPSLOCK },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
100 { SDLK_F1, MLK_KEY_F1 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
101 { SDLK_F2, MLK_KEY_F2 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
102 { SDLK_F3, MLK_KEY_F3 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
103 { SDLK_F4, MLK_KEY_F4 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
104 { SDLK_F5, MLK_KEY_F5 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
105 { SDLK_F6, MLK_KEY_F6 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
106 { SDLK_F7, MLK_KEY_F7 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
107 { SDLK_F8, MLK_KEY_F8 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
108 { SDLK_F9, MLK_KEY_F9 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
109 { SDLK_F10, MLK_KEY_F10 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
110 { SDLK_F11, MLK_KEY_F11 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
111 { SDLK_F12, MLK_KEY_F12 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
112 { SDLK_F13, MLK_KEY_F13 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
113 { SDLK_F14, MLK_KEY_F14 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
114 { SDLK_F15, MLK_KEY_F15 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
115 { SDLK_F16, MLK_KEY_F16 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
116 { SDLK_F17, MLK_KEY_F17 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
117 { SDLK_F18, MLK_KEY_F18 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
118 { SDLK_F19, MLK_KEY_F19 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
119 { SDLK_F20, MLK_KEY_F20 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
120 { SDLK_F21, MLK_KEY_F21 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
121 { SDLK_F22, MLK_KEY_F22 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
122 { SDLK_F23, MLK_KEY_F23 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
123 { SDLK_F24, MLK_KEY_F24 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
124 { SDLK_PRINTSCREEN, MLK_KEY_PRINTSCREEN },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
125 { SDLK_SCROLLLOCK, MLK_KEY_SCROLL_LOCK },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
126 { SDLK_PAUSE, MLK_KEY_PAUSE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
127 { SDLK_INSERT, MLK_KEY_INSERT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
128 { SDLK_HOME, MLK_KEY_HOME },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
129 { SDLK_PAGEUP, MLK_KEY_PAGEUP },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
130 { SDLK_DELETE, MLK_KEY_DELETE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
131 { SDLK_END, MLK_KEY_END },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
132 { SDLK_PAGEDOWN, MLK_KEY_PAGEDOWN },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
133 { SDLK_RIGHT, MLK_KEY_RIGHT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
134 { SDLK_LEFT, MLK_KEY_LEFT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
135 { SDLK_DOWN, MLK_KEY_DOWN },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
136 { SDLK_UP, MLK_KEY_UP },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
137 { SDLK_KP_DIVIDE, MLK_KEY_KP_DIVIDE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
138 { SDLK_KP_MULTIPLY, MLK_KEY_KP_MULTIPLY },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
139 { SDLK_KP_MINUS, MLK_KEY_KP_MINUS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
140 { SDLK_KP_PLUS, MLK_KEY_KP_PLUS },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
141 { SDLK_KP_ENTER, MLK_KEY_KP_ENTER },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
142 { SDLK_KP_1, MLK_KEY_KP_1 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
143 { SDLK_KP_2, MLK_KEY_KP_2 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
144 { SDLK_KP_3, MLK_KEY_KP_3 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
145 { SDLK_KP_4, MLK_KEY_KP_4 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
146 { SDLK_KP_5, MLK_KEY_KP_5 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
147 { SDLK_KP_6, MLK_KEY_KP_6 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
148 { SDLK_KP_7, MLK_KEY_KP_7 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
149 { SDLK_KP_8, MLK_KEY_KP_8 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
150 { SDLK_KP_9, MLK_KEY_KP_9 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
151 { SDLK_KP_0, MLK_KEY_KP_0 },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
152 { SDLK_KP_PERIOD, MLK_KEY_KP_PERIOD },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
153 { SDLK_KP_COMMA, MLK_KEY_KP_COMMA },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
154 { SDLK_MENU, MLK_KEY_MENU },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
155 { SDLK_MUTE, MLK_KEY_MUTE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
156 { SDLK_VOLUMEUP, MLK_KEY_VOLUME_UP },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
157 { SDLK_VOLUMEDOWN, MLK_KEY_VOLUME_DOWN },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
158 { SDLK_LCTRL, MLK_KEY_LCTRL },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
159 { SDLK_LSHIFT, MLK_KEY_LSHIFT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
160 { SDLK_LALT, MLK_KEY_LALT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
161 { SDLK_LGUI, MLK_KEY_LSUPER },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
162 { SDLK_RCTRL, MLK_KEY_RCTRL },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
163 { SDLK_RSHIFT, MLK_KEY_RSHIFT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
164 { SDLK_RALT, MLK_KEY_RALT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
165 { SDLK_RGUI, MLK_KEY_RSUPER },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
166 { 0, -1 }
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 };
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 /* 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
170 static const struct {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 int key;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
172 enum mlk_mouse_button value;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 } buttons[] = {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
174 { SDL_BUTTON_LEFT, MLK_MOUSE_BUTTON_LEFT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
175 { SDL_BUTTON_MIDDLE, MLK_MOUSE_BUTTON_MIDDLE },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
176 { SDL_BUTTON_RIGHT, MLK_MOUSE_BUTTON_RIGHT },
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
177 { -1, MLK_MOUSE_BUTTON_NONE }
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 };
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
179
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
180 /* Maintain with enum mlk_gamepad_button in gamepad.h */
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
181 static const struct {
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
182 int button;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
183 enum mlk_gamepad_button value;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
184 } pads[] = {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
185 { SDL_GAMEPAD_BUTTON_A, MLK_GAMEPAD_BUTTON_A },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
186 { SDL_GAMEPAD_BUTTON_B, MLK_GAMEPAD_BUTTON_B },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
187 { SDL_GAMEPAD_BUTTON_X, MLK_GAMEPAD_BUTTON_X },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
188 { SDL_GAMEPAD_BUTTON_Y, MLK_GAMEPAD_BUTTON_Y },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
189 { SDL_GAMEPAD_BUTTON_BACK, MLK_GAMEPAD_BUTTON_BACK },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
190 { SDL_GAMEPAD_BUTTON_GUIDE, MLK_GAMEPAD_BUTTON_LOGO },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
191 { SDL_GAMEPAD_BUTTON_START, MLK_GAMEPAD_BUTTON_START },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
192 { SDL_GAMEPAD_BUTTON_LEFT_STICK, MLK_GAMEPAD_BUTTON_LTHUMB },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
193 { SDL_GAMEPAD_BUTTON_RIGHT_STICK, MLK_GAMEPAD_BUTTON_RTHUMB },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
194 { SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, MLK_GAMEPAD_BUTTON_LSHOULDER },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
195 { SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, MLK_GAMEPAD_BUTTON_RSHOULDER },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
196 { SDL_GAMEPAD_BUTTON_DPAD_UP, MLK_GAMEPAD_BUTTON_UP },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
197 { SDL_GAMEPAD_BUTTON_DPAD_DOWN, MLK_GAMEPAD_BUTTON_DOWN },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
198 { SDL_GAMEPAD_BUTTON_DPAD_LEFT, MLK_GAMEPAD_BUTTON_LEFT },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
199 { SDL_GAMEPAD_BUTTON_DPAD_RIGHT, MLK_GAMEPAD_BUTTON_RIGHT },
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
200 { -1, MLK_GAMEPAD_BUTTON_UNKNOWN }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
201 };
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
202
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 static void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
204 convert_key(const SDL_Event *event, union mlk_event *ev)
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
206 ev->type = event->type == SDL_EVENT_KEY_DOWN ? MLK_EVENT_KEYDOWN : MLK_EVENT_KEYUP;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
207 ev->key.key = MLK_KEY_UNKNOWN;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 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
210 if (keymap[i].key == event->key.keysym.sym) {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 ev->key.key = keymap[i].value;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 break;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 static void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
218 convert_mouse(const SDL_Event *event, union mlk_event *ev)
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
220 ev->type = MLK_EVENT_MOUSE;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 ev->mouse.buttons = 0;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 ev->mouse.x = event->motion.x;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 ev->mouse.y = event->motion.y;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
224
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 if (event->motion.state & SDL_BUTTON_LMASK)
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
226 ev->mouse.buttons |= MLK_MOUSE_BUTTON_LEFT;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 if (event->motion.state & SDL_BUTTON_MMASK)
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
228 ev->mouse.buttons |= MLK_MOUSE_BUTTON_MIDDLE;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 if (event->motion.state & SDL_BUTTON_RMASK)
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
230 ev->mouse.buttons |= MLK_MOUSE_BUTTON_RIGHT;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 static void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
234 convert_click(const SDL_Event *event, union mlk_event *ev)
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
236 ev->type = event->type == SDL_EVENT_MOUSE_BUTTON_DOWN ? MLK_EVENT_CLICKDOWN : MLK_EVENT_CLICKUP;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
237 ev->click.button = MLK_MOUSE_BUTTON_NONE;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 ev->click.x = event->button.x;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 ev->click.y = event->button.y;
281
87b8c7510717 rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
240 ev->click.clicks = event->button.clicks;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
241
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
242 for (size_t i = 0; buttons[i].value != MLK_MOUSE_BUTTON_NONE; ++i) {
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 if (buttons[i].key == event->button.button) {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 ev->click.button = buttons[i].value;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 break;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
249
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
250 static void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
251 convert_pad(const SDL_Event *event, union mlk_event *ev)
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
252 {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
253 ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP;
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
254
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
255 for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
256 if (pads[i].button == event->gbutton.button) {
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
257 ev->pad.button = pads[i].value;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
258 break;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
259 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
260 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
261 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
262
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
263 static const struct {
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
264 int axis;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
265 enum mlk_gamepad_axis value;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
266 } axises[] = {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
267 { SDL_GAMEPAD_AXIS_LEFTX, MLK_GAMEPAD_AXIS_LX },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
268 { SDL_GAMEPAD_AXIS_LEFTY, MLK_GAMEPAD_AXIS_LY },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
269 { SDL_GAMEPAD_AXIS_RIGHTX, MLK_GAMEPAD_AXIS_RX },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
270 { SDL_GAMEPAD_AXIS_RIGHTY, MLK_GAMEPAD_AXIS_RY },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
271 { SDL_GAMEPAD_AXIS_LEFT_TRIGGER, MLK_GAMEPAD_AXIS_LTRIGGER },
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
272 { SDL_GAMEPAD_AXIS_RIGHT_TRIGGER, MLK_GAMEPAD_AXIS_RTRIGGER },
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
273 { -1, MLK_GAMEPAD_AXIS_UNKNOWN }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
274 };
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
275
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
276 static void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
277 convert_axis(const SDL_Event *event, union mlk_event *ev)
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
278 {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
279 ev->type = MLK_EVENT_AXIS;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
280 ev->axis.value = event->gaxis.value;
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
281
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
282 for (size_t i = 0; axises[i].value != MLK_GAMEPAD_AXIS_UNKNOWN; ++i) {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
283 if (axises[i].axis == event->gaxis.axis) {
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
284 ev->axis.axis = axises[i].value;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
285 break;
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
286 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
287 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
288 }
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
289
614
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
290 static void
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
291 convert_theme(union mlk_event *ev)
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
292 {
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
293 ev->type = MLK_EVENT_THEME;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
294
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
295 switch (SDL_GetSystemTheme()) {
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
296 case SDL_SYSTEM_THEME_DARK:
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
297 ev->theme.theme = MLK_WINDOW_THEME_DARK;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
298 break;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
299 default:
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
300 ev->theme.theme = MLK_WINDOW_THEME_LIGHT;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
301 break;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
302 }
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
303
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
304 mlk_window.theme_effective = ev->theme.theme;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
305 }
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
306
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
307 int
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
308 mlk_event_poll(union mlk_event *ev)
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 SDL_Event event;
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
312 memset(ev, 0, sizeof (*ev));
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
313
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 /*
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 * 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
316 * ones.
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 */
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 while (SDL_PollEvent(&event)) {
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 switch (event.type) {
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
320 case SDL_EVENT_QUIT:
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
321 ev->type = MLK_EVENT_QUIT;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
322 return 1;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
323 case SDL_EVENT_KEY_DOWN:
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
324 case SDL_EVENT_KEY_UP:
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 convert_key(&event, ev);
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
326 return 1;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
327 case SDL_EVENT_MOUSE_MOTION:
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 convert_mouse(&event, ev);
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
329 return 1;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
330 case SDL_EVENT_MOUSE_BUTTON_DOWN:
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
331 case SDL_EVENT_MOUSE_BUTTON_UP:
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 convert_click(&event, ev);
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
333 return 1;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
334 case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
335 case SDL_EVENT_GAMEPAD_BUTTON_UP:
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
336 convert_pad(&event, ev);
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
337 return 1;
613
f76cada0bbb2 misc: switch to SDL3
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
338 case SDL_EVENT_GAMEPAD_AXIS_MOTION:
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
339 convert_axis(&event, ev);
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
340 return 1;
614
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
341 case SDL_EVENT_SYSTEM_THEME_CHANGED:
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
342 /*
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
343 * We only report the event if the user preferrence is
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
344 * set to auto because we don't need it otherwise.
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
345 */
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
346 if (mlk_window.theme_user == MLK_WINDOW_THEME_AUTO) {
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
347 convert_theme(ev);
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
348 return 1;
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
349 }
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
350 break;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 default:
614
281608524dd1 misc: implement dark/light theming
David Demelier <markand@malikania.fr>
parents: 613
diff changeset
352 break;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 }
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
355
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
356 return 0;
19
bc1fdff76775 core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 }