mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-04 22:47:44 -04:00
in_sdl: allow external event handler
This commit is contained in:
parent
a4025790b5
commit
9227a7770e
2 changed files with 16 additions and 4 deletions
17
in_sdl.c
17
in_sdl.c
|
@ -26,6 +26,8 @@ struct in_sdl_state {
|
|||
keybits_t keystate[SDLK_LAST / KEYBITS_WORD_BITS + 1];
|
||||
};
|
||||
|
||||
static void (*ext_event_handler)(void *event);
|
||||
|
||||
static const char * const in_sdl_keys[SDLK_LAST] = {
|
||||
[SDLK_BACKSPACE] = "backspace",
|
||||
[SDLK_TAB] = "tab",
|
||||
|
@ -238,7 +240,7 @@ static int handle_event(struct in_sdl_state *state, SDL_Event *event,
|
|||
int *kc_out, int *down_out)
|
||||
{
|
||||
if (event->type != SDL_KEYDOWN && event->type != SDL_KEYUP)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
update_keystate(state->keystate, event->key.keysym.sym,
|
||||
event->type == SDL_KEYDOWN);
|
||||
|
@ -292,6 +294,8 @@ static int handle_joy_event(struct in_sdl_state *state, SDL_Event *event,
|
|||
down = event->jbutton.state == SDL_PRESSED;
|
||||
ret = 1;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
|
@ -328,6 +332,12 @@ static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down
|
|||
else
|
||||
ret = handle_event(state,
|
||||
&events[i], one_kc, one_down);
|
||||
if (ret == -1) {
|
||||
if (ext_event_handler != NULL)
|
||||
ext_event_handler(&events[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
retval |= ret;
|
||||
if (one_kc != NULL && ret)
|
||||
goto out;
|
||||
|
@ -461,8 +471,9 @@ static const in_drv_t in_sdl_drv = {
|
|||
.menu_translate = in_sdl_menu_translate,
|
||||
};
|
||||
|
||||
void in_sdl_init(const struct in_default_bind *defbinds)
|
||||
void in_sdl_init(const struct in_default_bind *defbinds,
|
||||
void (*handler)(void *event))
|
||||
{
|
||||
in_register_driver(&in_sdl_drv, defbinds);
|
||||
ext_event_handler = handler;
|
||||
}
|
||||
|
||||
|
|
3
in_sdl.h
3
in_sdl.h
|
@ -1,3 +1,4 @@
|
|||
struct in_default_bind;
|
||||
|
||||
void in_sdl_init(const struct in_default_bind *defbinds);
|
||||
void in_sdl_init(const struct in_default_bind *defbinds,
|
||||
void (*handler)(void *event));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue