comparison libmlk-core/mlk/core/event.c @ 613:f76cada0bbb2

misc: switch to SDL3
author David Demelier <markand@malikania.fr>
date Sun, 20 Aug 2023 11:14:58 +0200
parents 95792046d3d2
children 281608524dd1
comparison
equal deleted inserted replaced
612:297fa28cac90 613:f76cada0bbb2
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */ 17 */
18
19 #include <string.h>
18 20
19 #include <SDL.h> 21 #include <SDL.h>
20 22
21 #include "event.h" 23 #include "event.h"
22 24
178 /* Maintain with enum mlk_gamepad_button in gamepad.h */ 180 /* Maintain with enum mlk_gamepad_button in gamepad.h */
179 static const struct { 181 static const struct {
180 int button; 182 int button;
181 enum mlk_gamepad_button value; 183 enum mlk_gamepad_button value;
182 } pads[] = { 184 } pads[] = {
183 { SDL_CONTROLLER_BUTTON_A, MLK_GAMEPAD_BUTTON_A }, 185 { SDL_GAMEPAD_BUTTON_A, MLK_GAMEPAD_BUTTON_A },
184 { SDL_CONTROLLER_BUTTON_B, MLK_GAMEPAD_BUTTON_B }, 186 { SDL_GAMEPAD_BUTTON_B, MLK_GAMEPAD_BUTTON_B },
185 { SDL_CONTROLLER_BUTTON_X, MLK_GAMEPAD_BUTTON_X }, 187 { SDL_GAMEPAD_BUTTON_X, MLK_GAMEPAD_BUTTON_X },
186 { SDL_CONTROLLER_BUTTON_Y, MLK_GAMEPAD_BUTTON_Y }, 188 { SDL_GAMEPAD_BUTTON_Y, MLK_GAMEPAD_BUTTON_Y },
187 { SDL_CONTROLLER_BUTTON_BACK, MLK_GAMEPAD_BUTTON_BACK }, 189 { SDL_GAMEPAD_BUTTON_BACK, MLK_GAMEPAD_BUTTON_BACK },
188 { SDL_CONTROLLER_BUTTON_GUIDE, MLK_GAMEPAD_BUTTON_LOGO }, 190 { SDL_GAMEPAD_BUTTON_GUIDE, MLK_GAMEPAD_BUTTON_LOGO },
189 { SDL_CONTROLLER_BUTTON_START, MLK_GAMEPAD_BUTTON_START }, 191 { SDL_GAMEPAD_BUTTON_START, MLK_GAMEPAD_BUTTON_START },
190 { SDL_CONTROLLER_BUTTON_LEFTSTICK, MLK_GAMEPAD_BUTTON_LTHUMB }, 192 { SDL_GAMEPAD_BUTTON_LEFT_STICK, MLK_GAMEPAD_BUTTON_LTHUMB },
191 { SDL_CONTROLLER_BUTTON_RIGHTSTICK, MLK_GAMEPAD_BUTTON_RTHUMB }, 193 { SDL_GAMEPAD_BUTTON_RIGHT_STICK, MLK_GAMEPAD_BUTTON_RTHUMB },
192 { SDL_CONTROLLER_BUTTON_LEFTSHOULDER, MLK_GAMEPAD_BUTTON_LSHOULDER }, 194 { SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, MLK_GAMEPAD_BUTTON_LSHOULDER },
193 { SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, MLK_GAMEPAD_BUTTON_RSHOULDER }, 195 { SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, MLK_GAMEPAD_BUTTON_RSHOULDER },
194 { SDL_CONTROLLER_BUTTON_DPAD_UP, MLK_GAMEPAD_BUTTON_UP }, 196 { SDL_GAMEPAD_BUTTON_DPAD_UP, MLK_GAMEPAD_BUTTON_UP },
195 { SDL_CONTROLLER_BUTTON_DPAD_DOWN, MLK_GAMEPAD_BUTTON_DOWN }, 197 { SDL_GAMEPAD_BUTTON_DPAD_DOWN, MLK_GAMEPAD_BUTTON_DOWN },
196 { SDL_CONTROLLER_BUTTON_DPAD_LEFT, MLK_GAMEPAD_BUTTON_LEFT }, 198 { SDL_GAMEPAD_BUTTON_DPAD_LEFT, MLK_GAMEPAD_BUTTON_LEFT },
197 { SDL_CONTROLLER_BUTTON_DPAD_RIGHT, MLK_GAMEPAD_BUTTON_RIGHT }, 199 { SDL_GAMEPAD_BUTTON_DPAD_RIGHT, MLK_GAMEPAD_BUTTON_RIGHT },
198 { -1, MLK_GAMEPAD_BUTTON_UNKNOWN } 200 { -1, MLK_GAMEPAD_BUTTON_UNKNOWN }
199 }; 201 };
200 202
201 static void 203 static void
202 convert_key(const SDL_Event *event, union mlk_event *ev) 204 convert_key(const SDL_Event *event, union mlk_event *ev)
203 { 205 {
204 ev->type = event->type == SDL_KEYDOWN ? MLK_EVENT_KEYDOWN : MLK_EVENT_KEYUP; 206 ev->type = event->type == SDL_EVENT_KEY_DOWN ? MLK_EVENT_KEYDOWN : MLK_EVENT_KEYUP;
205 ev->key.key = MLK_KEY_UNKNOWN; 207 ev->key.key = MLK_KEY_UNKNOWN;
206 208
207 for (size_t i = 0; keymap[i].key != 0; ++i) { 209 for (size_t i = 0; keymap[i].key != 0; ++i) {
208 if (keymap[i].key == event->key.keysym.sym) { 210 if (keymap[i].key == event->key.keysym.sym) {
209 ev->key.key = keymap[i].value; 211 ev->key.key = keymap[i].value;
229 } 231 }
230 232
231 static void 233 static void
232 convert_click(const SDL_Event *event, union mlk_event *ev) 234 convert_click(const SDL_Event *event, union mlk_event *ev)
233 { 235 {
234 ev->type = event->type == SDL_MOUSEBUTTONDOWN ? MLK_EVENT_CLICKDOWN : MLK_EVENT_CLICKUP; 236 ev->type = event->type == SDL_EVENT_MOUSE_BUTTON_DOWN ? MLK_EVENT_CLICKDOWN : MLK_EVENT_CLICKUP;
235 ev->click.button = MLK_MOUSE_BUTTON_NONE; 237 ev->click.button = MLK_MOUSE_BUTTON_NONE;
236 ev->click.x = event->button.x; 238 ev->click.x = event->button.x;
237 ev->click.y = event->button.y; 239 ev->click.y = event->button.y;
238 ev->click.clicks = event->button.clicks; 240 ev->click.clicks = event->button.clicks;
239 241
246 } 248 }
247 249
248 static void 250 static void
249 convert_pad(const SDL_Event *event, union mlk_event *ev) 251 convert_pad(const SDL_Event *event, union mlk_event *ev)
250 { 252 {
251 ev->type = event->type == SDL_CONTROLLERBUTTONDOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP; 253 ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP;
252 254
253 for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) { 255 for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) {
254 if (pads[i].button == event->cbutton.button) { 256 if (pads[i].button == event->gbutton.button) {
255 ev->pad.button = pads[i].value; 257 ev->pad.button = pads[i].value;
256 break; 258 break;
257 } 259 }
258 } 260 }
259 } 261 }
260 262
261 static const struct { 263 static const struct {
262 int axis; 264 int axis;
263 enum mlk_gamepad_axis value; 265 enum mlk_gamepad_axis value;
264 } axises[] = { 266 } axises[] = {
265 { SDL_CONTROLLER_AXIS_LEFTX, MLK_GAMEPAD_AXIS_LX }, 267 { SDL_GAMEPAD_AXIS_LEFTX, MLK_GAMEPAD_AXIS_LX },
266 { SDL_CONTROLLER_AXIS_LEFTY, MLK_GAMEPAD_AXIS_LY }, 268 { SDL_GAMEPAD_AXIS_LEFTY, MLK_GAMEPAD_AXIS_LY },
267 { SDL_CONTROLLER_AXIS_RIGHTX, MLK_GAMEPAD_AXIS_RX }, 269 { SDL_GAMEPAD_AXIS_RIGHTX, MLK_GAMEPAD_AXIS_RX },
268 { SDL_CONTROLLER_AXIS_RIGHTY, MLK_GAMEPAD_AXIS_RY }, 270 { SDL_GAMEPAD_AXIS_RIGHTY, MLK_GAMEPAD_AXIS_RY },
269 { SDL_CONTROLLER_AXIS_TRIGGERLEFT, MLK_GAMEPAD_AXIS_LTRIGGER }, 271 { SDL_GAMEPAD_AXIS_LEFT_TRIGGER, MLK_GAMEPAD_AXIS_LTRIGGER },
270 { SDL_CONTROLLER_AXIS_TRIGGERRIGHT, MLK_GAMEPAD_AXIS_RTRIGGER }, 272 { SDL_GAMEPAD_AXIS_RIGHT_TRIGGER, MLK_GAMEPAD_AXIS_RTRIGGER },
271 { -1, MLK_GAMEPAD_AXIS_UNKNOWN } 273 { -1, MLK_GAMEPAD_AXIS_UNKNOWN }
272 }; 274 };
273 275
274 static void 276 static void
275 convert_axis(const SDL_Event *event, union mlk_event *ev) 277 convert_axis(const SDL_Event *event, union mlk_event *ev)
276 { 278 {
277 ev->type = MLK_EVENT_AXIS; 279 ev->type = MLK_EVENT_AXIS;
278 ev->axis.value = event->caxis.value; 280 ev->axis.value = event->gaxis.value;
279 281
280 for (size_t i = 0; axises[i].value != MLK_GAMEPAD_AXIS_UNKNOWN; ++i) { 282 for (size_t i = 0; axises[i].value != MLK_GAMEPAD_AXIS_UNKNOWN; ++i) {
281 if (axises[i].axis == event->caxis.axis) { 283 if (axises[i].axis == event->gaxis.axis) {
282 ev->axis.axis = axises[i].value; 284 ev->axis.axis = axises[i].value;
283 break; 285 break;
284 } 286 }
285 } 287 }
286 } 288 }
296 * Loop until we find an event we want to report, we skip unneeded 298 * Loop until we find an event we want to report, we skip unneeded
297 * ones. 299 * ones.
298 */ 300 */
299 while (SDL_PollEvent(&event)) { 301 while (SDL_PollEvent(&event)) {
300 switch (event.type) { 302 switch (event.type) {
301 case SDL_QUIT: 303 case SDL_EVENT_QUIT:
302 ev->type = MLK_EVENT_QUIT; 304 ev->type = MLK_EVENT_QUIT;
303 return 1; 305 return 1;
304 case SDL_KEYDOWN: 306 case SDL_EVENT_KEY_DOWN:
305 case SDL_KEYUP: 307 case SDL_EVENT_KEY_UP:
306 convert_key(&event, ev); 308 convert_key(&event, ev);
307 return 1; 309 return 1;
308 case SDL_MOUSEMOTION: 310 case SDL_EVENT_MOUSE_MOTION:
309 convert_mouse(&event, ev); 311 convert_mouse(&event, ev);
310 return 1; 312 return 1;
311 case SDL_MOUSEBUTTONDOWN: 313 case SDL_EVENT_MOUSE_BUTTON_DOWN:
312 case SDL_MOUSEBUTTONUP: 314 case SDL_EVENT_MOUSE_BUTTON_UP:
313 convert_click(&event, ev); 315 convert_click(&event, ev);
314 return 1; 316 return 1;
315 case SDL_CONTROLLERBUTTONDOWN: 317 case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
316 case SDL_CONTROLLERBUTTONUP: 318 case SDL_EVENT_GAMEPAD_BUTTON_UP:
317 convert_pad(&event, ev); 319 convert_pad(&event, ev);
318 return 1; 320 return 1;
319 case SDL_CONTROLLERAXISMOTION: 321 case SDL_EVENT_GAMEPAD_AXIS_MOTION:
320 convert_axis(&event, ev); 322 convert_axis(&event, ev);
321 return 1; 323 return 1;
322 default: 324 default:
323 continue; 325 continue;
324 } 326 }