diff options
| author | Tomas Chvatal (scarabeus) <tomas.chvatal@gmail.com> | 2008-10-22 22:50:54 +0200 |
|---|---|---|
| committer | Tomas Chvatal (scarabeus) <tomas.chvatal@gmail.com> | 2008-10-22 22:50:54 +0200 |
| commit | e12753d2ec9db83ec08bb9db63902a82fb245cdd (patch) | |
| tree | 6e4a63b790d6335f969f88b797a927e0fb25f37a /src/widget/widget_catchkey.c~ | |
| parent | 0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (diff) | |
X
Diffstat (limited to 'src/widget/widget_catchkey.c~')
| -rw-r--r-- | src/widget/widget_catchkey.c~ | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/widget/widget_catchkey.c~ b/src/widget/widget_catchkey.c~ new file mode 100644 index 0000000..215e5b3 --- /dev/null +++ b/src/widget/widget_catchkey.c~ @@ -0,0 +1,154 @@ + +#include <stdlib.h> +#include <assert.h> + +#include "main.h" +#include "interface.h" +#include "font.h" + +#include "widget.h" +#include "widget_catchkey.h" + +widget_t* newWidgetCatchkey(int key, int x, int y, void *event) +{ + widget_catchkey_t *new; + + new = malloc( sizeof(widget_catchkey_t) ); + new->key = key; + new->fce_event = event; + new->active = FALSE; + + return newWidget(WIDGET_TYPE_CATCHKEY, x, y, WIDGET_CATCHKEY_WIDTH, WIDGET_CATCHKEY_HEIGHT, new); +} + +int getWidgetCatchKey(widget_t *widget) +{ + widget_catchkey_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_CATCHKEY ); + + p = (widget_catchkey_t *) widget->private_data; + + return p->key; +} + +void setWidgetCatchKey(widget_t *widget, int key) +{ + widget_catchkey_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_CATCHKEY ); + + p = (widget_catchkey_t *) widget->private_data; + + p->key = key; +} + +void drawWidgetCatchkey(widget_t *widget) +{ + widget_catchkey_t *p; + char *name; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_CATCHKEY ); + + p = (widget_catchkey_t *) widget->private_data; + name = NULL; + + if( p->key != WIDGET_CATCHKEY_NOKEY ) + { + name = (char *) SDL_GetKeyName(p->key); + } + + if( name == NULL ) + { + name = "no key"; + } + + if( p->active ) + { + drawFont(name, widget->x, widget->y, COLOR_RED); + } + else + { + drawFont(name, widget->x, widget->y, COLOR_WHITE); + } +} + +static int getPessAnyKey() +{ + Uint8 *mapa; + int i; + + mapa = SDL_GetKeyState(NULL); + + for( i = SDLK_FIRST ; i <= SDLK_COMPOSE ; i++ ) + { + if( i == SDLK_NUMLOCK || // black key + i == SDLK_CAPSLOCK || + i == SDLK_SCROLLOCK ) + { + continue; + } + + if( mapa[i] == SDL_PRESSED ) + { + return i; + } + } + + return WIDGET_CATCHKEY_NOKEY; +} + +void eventWidgetCatchkey(widget_t *widget) +{ + widget_catchkey_t *p; + int x, y; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_CATCHKEY ); + + p = (widget_catchkey_t *) widget->private_data; + + getMousePosition(&x, &y); + + if( isMouseClicked() ) + { + if( x >= widget->x && x <= widget->x+WIDGET_CATCHKEY_WIDTH && + y >= widget->y && y <= widget->y+WIDGET_CATCHKEY_HEIGHT ) + { + p->active = TRUE; + } + else + { + p->active = FALSE; + } + } + + if( p->active == TRUE ) + { + int key; + + key = getPessAnyKey(); + + if( key != WIDGET_CATCHKEY_NOKEY ) + { + p->key = key; + p->fce_event(widget); + } + } +} + +void destroyWidgetCatchkey(widget_t *widget) +{ + widget_catchkey_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_CATCHKEY ); + + p = (widget_catchkey_t *) widget->private_data; + + free(p); + destroyWidget(widget); +} |