summaryrefslogtreecommitdiff
path: root/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/widget_catchkey.c104
-rw-r--r--src/widget/widget_catchkey.h29
-rw-r--r--src/widget/widget_textfield.c4
3 files changed, 135 insertions, 2 deletions
diff --git a/src/widget/widget_catchkey.c b/src/widget/widget_catchkey.c
new file mode 100644
index 0000000..7443358
--- /dev/null
+++ b/src/widget/widget_catchkey.c
@@ -0,0 +1,104 @@
+
+#include <stdlib.h>
+
+#include "main.h"
+#include "interface.h"
+#include "font.h"
+#include "widget_catchkey.h"
+
+widget_catchkey_t* newWidgetCatchkey(int x, int y, int key)
+{
+ widget_catchkey_t *new;
+
+ new = malloc( sizeof(widget_catchkey_t) );
+
+ new->x = x;
+ new->y = y;
+ new->key = key;
+
+ return new;
+}
+
+int getWidgetCatchKey(widget_catchkey_t *p)
+{
+ return p->key;
+}
+
+void setWidgetCatchKey(widget_catchkey_t *p, int key)
+{
+ p->key = key;
+}
+
+void drawWidgetCatchkey(widget_catchkey_t *p)
+{
+ char *name;
+
+ name = NULL;
+
+ if( p->key != WIDGET_CATCHKEY_NOKEY )
+ {
+ name = (char *) SDL_GetKeyName(p->key);
+ }
+
+ if( name == NULL )
+ {
+ name = "no key";
+ }
+
+ drawFont(name, p->x, p->y, COLOR_WHITE);
+}
+
+static int getPessAnyKey()
+{
+ Uint8 *mapa;
+ int i;
+
+ mapa = SDL_GetKeyState(NULL);
+
+ for( i = SDLK_FIRST ; i <= SDLK_F15 ; i++ )
+ {
+ if( mapa[i] == SDL_PRESSED )
+ {
+ return i;
+ }
+ }
+
+ return WIDGET_CATCHKEY_NOKEY;
+}
+
+void eventWidgetCatchkey(widget_catchkey_t *p)
+{
+ int x, y;
+
+ getMousePosition(&x, &y);
+
+ if( isMouseClicked() )
+ {
+ if( x >= p->x && x <= p->x+WIDGET_CATCHKEY_WIDTH &&
+ y >= p->y && y <= p->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;
+ }
+ }
+}
+
+void destroyWidgetCatchkey(widget_catchkey_t *p)
+{
+ free(p);
+}
diff --git a/src/widget/widget_catchkey.h b/src/widget/widget_catchkey.h
new file mode 100644
index 0000000..ab95bbd
--- /dev/null
+++ b/src/widget/widget_catchkey.h
@@ -0,0 +1,29 @@
+
+#ifndef WIDGET_CATCHKEY_H
+
+#define WIDGET_CATCHKEY_H
+
+#include "main.h"
+
+#define WIDGET_CATCHKEY_WIDTH 64
+#define WIDGET_CATCHKEY_HEIGHT 32
+
+#define WIDGET_CATCHKEY_NOKEY -1
+
+typedef struct widget_catchkey_struct
+{
+ int x, y;
+ int w, h;
+ int key;
+ bool_t active;
+} widget_catchkey_t;
+
+extern widget_catchkey_t* newWidgetCatchkey(int x, int y, int key);
+extern int getWidgetCatchKey(widget_catchkey_t *p);
+extern void setWidgetCatchKey(widget_catchkey_t *p, int key);
+extern void drawWidgetCatchkey(widget_catchkey_t *p);
+extern void eventWidgetCatchkey(widget_catchkey_t *p);
+extern void destroyWidgetCatchkey(widget_catchkey_t *p);
+
+#endif
+
diff --git a/src/widget/widget_textfield.c b/src/widget/widget_textfield.c
index 70e2a66..ee1cf76 100644
--- a/src/widget/widget_textfield.c
+++ b/src/widget/widget_textfield.c
@@ -32,9 +32,9 @@ static void drawBackground(widget_textfield_t *p)
{
static image_t *g_textfield0 = NULL;
static image_t *g_textfield1 = NULL;
- int x, y;
+ //int x, y;
- getMousePosition(&x, &y);
+ //getMousePosition(&x, &y);
if( g_textfield0 == NULL )
{