diff options
Diffstat (limited to 'sdl/event.c')
-rw-r--r-- | sdl/event.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/sdl/event.c b/sdl/event.c index e6c4c00..c3120af 100644 --- a/sdl/event.c +++ b/sdl/event.c @@ -2,7 +2,7 @@ * * Event Handler * - * notes: I would be useful to create a following function + * notes: It would be useful to create a following function * register_signal(SDL_HOLDDOWN, EVENT_ACTION_INCR, float *p, float val) * * struct platform is still passed globally @@ -20,6 +20,23 @@ extern struct platform p; extern int program_running; +/* our function table */ +static struct event_vtbl event_tbl; + +int event_handler_init(struct event_vtbl *tbl) +{ + if (!tbl) + return -1; + + event_tbl = *tbl; + + /* predefined handlers that are automatically provided */ + if (!event_tbl.windowresize) + event_tbl.windowresize = window_resize; + + return 0; +} + /* process SDL events */ void sdl_process_events(void) { @@ -46,12 +63,14 @@ void sdl_process_events(void) case SDL_KEYDOWN: { keys_held[sym] = 1; - event_keydown(&event.key.keysym, keys_held, flag); + if (event_tbl.keydown) + event_tbl.keydown(&event.key.keysym, keys_held, flag); break; } case SDL_VIDEORESIZE: { - window_resize(event.resize.w, event.resize.h); + if (event_tbl.windowresize) + event_tbl.windowresize(event.resize.w, event.resize.h); break; } case SDL_QUIT: @@ -76,6 +95,7 @@ void sdl_process_events(void) flag = !flag; } +/* here are the event handler functions */ void event_keydown(SDL_keysym *keysym, const unsigned int *keys_held, const int flag) { if (!flag) |