From fb57dde3ed0f3e6e17022107e7a2f2a46866fbf1 Mon Sep 17 00:00:00 2001 From: Allanis Date: Wed, 27 Feb 2013 14:50:16 +0000 Subject: [PATCH] [Fix] No-one knew it, but input for toolkit was buggy. Seperated toolkit input from game input to fix this. --- src/input.c | 11 +++++------ src/toolkit.c | 15 ++++++++++++++- src/toolkit.h | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/input.c b/src/input.c index 8ca8f00..3bd5dff 100644 --- a/src/input.c +++ b/src/input.c @@ -298,6 +298,11 @@ static void input_keyup(SDLKey key) { // Just seperates the event types. void input_handle(SDL_Event* event) { + if(toolkit) { + // Toolkit is handled seperately. + toolkit_input(event); + return; + } switch(event->type) { case SDL_JOYAXISMOTION: input_joyaxis(event->jaxis.axis, event->jaxis.value); @@ -314,12 +319,6 @@ void input_handle(SDL_Event* event) { case SDL_KEYUP: input_keyup(event->key.keysym.sym); break; - // Toolkit. - case SDL_MOUSEMOTION: - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - if(toolkit) toolkit_mouseEvent(event); - break; } } diff --git a/src/toolkit.c b/src/toolkit.c index 04f6122..3281165 100644 --- a/src/toolkit.c +++ b/src/toolkit.c @@ -75,6 +75,8 @@ static int mwindows = 0; static Widget* window_newWidget(Window* w); static void widget_cleanup(Widget* widget); static Window* window_wget(const unsigned int wid); +// Input. +static void toolkit_mouseEvent(SDL_Event* event); // Render. static void window_render(Window* w); static void toolkit_renderButton(Widget* btn, double bx, double by); @@ -502,6 +504,7 @@ static void window_render(Window* w) { } } +// Renders a button. static void toolkit_renderButton(Widget* btn, double bx, double by) { glColour* c, *dc, *oc, *lc; double x, y; @@ -670,9 +673,19 @@ void toolkit_render(void) { } +void toolkit_input(SDL_Event* event) { + switch(event->type) { + case SDL_MOUSEMOTION: + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + toolkit_mouseEvent(event); + break; + } +} + // Input. static int mouse_down = 0; -void toolkit_mouseEvent(SDL_Event* event) { +static void toolkit_mouseEvent(SDL_Event* event) { int i; double x, y; Window* w; diff --git a/src/toolkit.h b/src/toolkit.h index 21b2007..8a33458 100644 --- a/src/toolkit.h +++ b/src/toolkit.h @@ -31,7 +31,7 @@ void window_destroyWidget(unsigned wid, const char* wgtname); void toolkit_render(void); // Input. -void toolkit_mouseEvent(SDL_Event* event); +void toolkit_input(SDL_Event* event); // Init/Exit. int toolkit_init(void);