summaryrefslogtreecommitdiffstats
path: root/sdl/event.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdl/event.c')
-rw-r--r--sdl/event.c26
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)