#include "TZR_events.h" #include "TZR_globals.h" #include "sdl_error.h" #include "reserve.h" #include "getbind.h" #include #include int TZR_PollEvent(TZR_Event *e) { TZR_Event discard; if (e == NULL) e = &discard; SDL_Event se; while (SDL_PollEvent(&se)) switch (se.type) { case SDL_QUIT: e->type = TZR_EV_QUIT; ___tzr_should_quit = 1; return 1; case SDL_KEYDOWN: if (se.key.repeat) break; e->type = TZR_EV_KEYDOWN; e->button = se.key.keysym.scancode; ___tzr_keystates[e->button] = TZR_KEYSTATE_PRESS; return 1; case SDL_KEYUP: e->type = TZR_EV_KEYUP; e->button = se.key.keysym.scancode; ___tzr_keystates[e->button] = TZR_KEYSTATE_RELEASE; return 1; case SDL_MOUSEBUTTONDOWN: ___tzr_mouse_x = se.button.x; ___tzr_mouse_y = se.button.y; ___tzr_mousestates[se.button.button] = TZR_KEYSTATE_PRESS; break; case SDL_MOUSEBUTTONUP: ___tzr_mouse_x = se.button.x; ___tzr_mouse_y = se.button.y; ___tzr_mousestates[se.button.button] = TZR_KEYSTATE_RELEASE; break; case SDL_MOUSEMOTION: ___tzr_mouse_x = se.motion.x; ___tzr_mouse_y = se.motion.y; break; case SDL_MOUSEWHEEL: ___tzr_scroll_x = se.wheel.x; ___tzr_scroll_y = se.wheel.y; break; case SDL_JOYDEVICEADDED: { size_t i; for (i = 0; i < ___tzr_joysticks_size; i++) { if (___tzr_joysticks[i].ptr == NULL) break; } if (i == ___tzr_joysticks_size) { void *vec = ___tzr_joysticks; if (reserve(&vec, ___tzr_joysticks_size + 1, &___tzr_joysticks_capacity, sizeof(SDL_Joystick *))) { TZR_Log("failed to reserve for new joystick"); break; } ___tzr_joysticks = vec; ___tzr_joysticks_size += 1; i = ___tzr_joysticks_size - 1; } SDL_GameController *jstick = SDL_GameControllerOpen(se.jdevice.which); if (jstick == NULL) { sdl_error(0); break; } memset(&___tzr_joysticks[i], 0, sizeof(___tzr_joysticks[i])); ___tzr_joysticks[i].ptr = jstick; TZR_Log("opened joystick"); break; } case SDL_JOYDEVICEREMOVED: for (size_t i = 0; i < ___tzr_joysticks_size; i++) { SDL_Joystick *const jstick = SDL_GameControllerGetJoystick(___tzr_joysticks[i].ptr); if (se.jdevice.which == SDL_JoystickInstanceID(jstick)) { SDL_GameControllerClose(___tzr_joysticks[i].ptr); ___tzr_joysticks[i].ptr = NULL; break; } } TZR_Log("didn't remove no joystick"); break; default: break; } return 0; }