summaryrefslogtreecommitdiff
path: root/src/widget/widget_catchkey.c~
diff options
context:
space:
mode:
authorTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
committerTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
commite12753d2ec9db83ec08bb9db63902a82fb245cdd (patch)
tree6e4a63b790d6335f969f88b797a927e0fb25f37a /src/widget/widget_catchkey.c~
parent0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (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);
+}