guientry fixed.. also some other little bugfixes..

master
steffen 13 years ago
parent 68803c1921
commit cff2c9a7cf

@ -1,4 +1,4 @@
/* $Id: gui.c,v 1.13 2013/02/27 23:50:17 steffen Exp $ */ /* $Id: gui.c,v 1.14 2013/02/28 23:19:59 steffen Exp $ */
/*************************************************************************** /***************************************************************************
* gui.c * gui.c
* *
@ -208,3 +208,9 @@ void gui_event_addmousepos (GUIEvent *event, iPoint pos, int neg) {
event->mousepos.y += neg ? pos.y : -pos.y; event->mousepos.y += neg ? pos.y : -pos.y;
return; return;
}; };
void gui_set_focus (GUIItem *item) {
currentwin->focus = item;
currentwin->screen_changed = 1;
};

@ -32,8 +32,7 @@
enum { enum {
EGUI_NONE, EGUI_NONE,
EGUI_KEYPRESSED, EGUI_KEYCHAR,
EGUI_KEYRELEASED,
EGUI_MOUSEMOVE, EGUI_MOUSEMOVE,
EGUI_MOUSEPRESSED, EGUI_MOUSEPRESSED,
EGUI_MOUSERELEASED EGUI_MOUSERELEASED
@ -141,6 +140,7 @@ extern void gui_draw ();
extern void gui_close (); extern void gui_close ();
extern int gui_event (GUIEvent event); extern int gui_event (GUIEvent event);
extern void gui_event_addmousepos (GUIEvent *event, iPoint pos, int neg); extern void gui_event_addmousepos (GUIEvent *event, iPoint pos, int neg);
extern void gui_set_focus (GUIItem *item);
extern void gui_window_new (GUIWindow *win, int w, int h, char *title); extern void gui_window_new (GUIWindow *win, int w, int h, char *title);
extern void gui_window_close (GUIWindow *win); extern void gui_window_close (GUIWindow *win);

@ -1,4 +1,4 @@
/* $Id: gui_entry.c,v 1.7 2013/02/27 23:50:17 steffen Exp $ */ /* $Id: gui_entry.c,v 1.8 2013/02/28 23:19:59 steffen Exp $ */
/*************************************************************************** /***************************************************************************
* gui_entry.c * gui_entry.c
* *
@ -38,6 +38,9 @@ void gui_entry_draw (GUIItem *item) {
GUIEntry *entry = NULL; GUIEntry *entry = NULL;
if (item) entry = (GUIEntry *) item->data; if (item) entry = (GUIEntry *) item->data;
else return;
d_printf ("draw entry: curpos:%d", entry->curpos);
ls.width = 1.0; ls.width = 1.0;
if (currentwin->focus == (void*) item) if (currentwin->focus == (void*) item)
@ -69,40 +72,44 @@ void gui_entry_draw (GUIItem *item) {
*/ */
void gui_entry_event (GUIItem *item, GUIEvent *event) { void gui_entry_event (GUIItem *item, GUIEvent *event) {
char text1[GUI_TEXTLEN]; char text1[GUI_TEXTLEN];
char text2[GUI_TEXTLEN];
GUIEntry *entry = NULL; GUIEntry *entry = NULL;
if (item) entry = (GUIEntry *) item->data; if (item) entry = (GUIEntry *) item->data;
d_printf ("gui_entry_event: %d pos: %d,%d", event->event, event->mousepos.x, event->mousepos.y); d_printf ("gui_entry_event: %d pos: %d,%d key:%d", event->event, event->mousepos.x, event->mousepos.y, event->keyval);
if (event->event == EGUI_MOUSERELEASED) { if (event->event == EGUI_MOUSERELEASED) gui_set_focus (item);
d_printf ("gui_entry_event set focus");
currentwin->focus = item;
}
else if (event->event == EGUI_KEYRELEASED) { else if (event->event == EGUI_KEYCHAR) {
d_printf ("gui_entry_event: curpos:%d len:%d text:%s char:%x", entry->curpos, strlen (entry->text), entry->text, event->keyval); d_printf ("gui_entry_event: curpos:%d len:%d text:%s char:%x", entry->curpos, strlen (entry->text), entry->text, event->keyval);
if (event->keyval == 0xff08) { // backspace if (event->keyval == 0x08) { // backspace
// strncpy (text1, entry->text, entry->curpos-1); if (entry->curpos > 0) {
// snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos); memset (text1, 0x0, GUI_TEXTLEN);
// strncpy (entry->text, text2, GUI_TEXTLEN); memset (text2, 0x0, GUI_TEXTLEN);
// entry->curpos--; strncpy (text1, entry->text, entry->curpos-1);
entry->text[0] = 0; snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos);
entry->curpos = 0; strncpy (entry->text, text2, GUI_TEXTLEN);
entry->curpos--;
}
else {
entry->text[0] = 0;
entry->curpos = 0;
}
} }
else if (event->keyval == 0xff1b) { // esc else if (event->keyval == 0x1b) { // esc
gui_close (); gui_close ();
} }
else if (event->keyval == 0xff0d) { // enter else if (event->keyval == 0x0d) { // enter
if (entry->callback_enter) entry->callback_enter (); if (entry->callback_enter) entry->callback_enter ();
} }
else if (event->keyval == 0xff51) { // left else if (event->keyval == 0x51) { // left
// entry->curpos--; entry->curpos--;
} }
else if (event->keyval == 0xff53) { // right else if (event->keyval == 0x53) { // right
// entry->curpos++; entry->curpos++;
} }
else if ((event->keyval & 0xff00) == 0xff00) { else if ((event->keyval & 0x00) == 0xff00) {
// ignore all the rest // ignore all the rest
} }
else { else {

@ -1,4 +1,4 @@
/* $Id: gui_window.c,v 1.6 2013/02/27 22:21:35 steffen Exp $ */ /* $Id: gui_window.c,v 1.7 2013/02/28 23:19:59 steffen Exp $ */
/*************************************************************************** /***************************************************************************
* gui_window.c * gui_window.c
* *
@ -87,6 +87,7 @@ void gui_window_item_add (GUIWindow *win, GUIItem *item) {
} }
win->items[ifree] = item; win->items[ifree] = item;
win->screen_changed = 1;
d_printf ("gui_window_item_add win:%p ifree:%d item:%p", win, ifree, item); d_printf ("gui_window_item_add win:%p ifree:%d item:%p", win, ifree, item);
}; };

@ -27,6 +27,7 @@
#include "system.h" #include "system.h"
void gui_config_close (); void gui_config_close ();
void gui_config_seldir ();
GUIWindow wcfg = {0}; GUIWindow wcfg = {0};
@ -44,9 +45,12 @@ void gui_config_show () {
wcfg.style = WGUI_S_VCENTER | WGUI_S_HCENTER; wcfg.style = WGUI_S_VCENTER | WGUI_S_HCENTER;
gui_show (&wcfg); gui_show (&wcfg);
if (map_path == NULL) map_path = gui_entry_new (NULL, 5, 30, 155, 20); if (map_path == NULL) map_path = gui_entry_new (cfg.mappath, 5, 30, 155, 20);
gui_window_item_add (&wcfg, map_path); gui_window_item_add (&wcfg, map_path);
if (map_seldir == NULL) map_seldir = gui_button_new (_("Browse"), 170, 30, 40, 20);
GUI_BUTTON_T (map_seldir)->callback_clicked = gui_config_seldir;
gui_window_item_add (&wcfg, map_seldir);
}; };
@ -54,3 +58,8 @@ void gui_config_close () {
gui_close (); gui_close ();
}; };
void gui_config_seldir () {
d_printf ("select dir...");
};

@ -114,6 +114,7 @@ int msdl_eventloop () {
SDL_Event event, lastevent; SDL_Event event, lastevent;
int gotevent = 0, keeppoll = 1; int gotevent = 0, keeppoll = 1;
GUIEvent gevent; GUIEvent gevent;
static int oldkey = 0;
while (keeppoll && SDL_PollEvent (&lastevent)) { while (keeppoll && SDL_PollEvent (&lastevent)) {
event = lastevent; event = lastevent;
@ -163,8 +164,20 @@ int msdl_eventloop () {
gui_event (gevent); gui_event (gevent);
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN: {
int keyu = 0;
if (oldkey != event.key.keysym.sym) {
keyu = oldkey = event.key.keysym.unicode;
gevent.keyval = keyu;
gevent.event = EGUI_KEYCHAR;
gevent.mousepos.x = event.motion.x;
gevent.mousepos.y = event.motion.y;
if (gui_event (gevent) != 0) draw();
}
} break;
case SDL_KEYUP: case SDL_KEYUP:
oldkey = 0;
break; break;
default: default:
@ -176,6 +189,68 @@ int msdl_eventloop () {
}; };
/*
* some input handling code.. in sdl it seemed to work fine... used alot
* within the bomberclone code.
*
int key = 0, keyu = 0;
ki->changed = 0;
if (event->type == SDL_KEYDOWN && keybinput_oldkey != event->key.keysym.sym) {
key = keybinput_oldkey = event->key.keysym.sym;
keyu = event->key.keysym.unicode;
if (key == 8) { // BACKSPACE
if (ki->curpos > 0) {
ki->curpos--;
ki->text[ki->curpos] = 0;
ki->changed = 1;
}
}
else if (ki->type == KEYBI_text && ((keyu >= 32 && keyu <= 126) || (keyu >= 128 && keyu <= 255))) {
if (ki->curpos < ki->maxlen) {
ki->text[ki->curpos++] = event->key.keysym.unicode;
ki->text[ki->curpos] = 0;
ki->changed = 1;
}
}
else if (ki->type == KEYBI_int && (keyu == '-' || (keyu >= '0' && keyu <= '9'))) {
if (ki->curpos < 255) {
ki->text[ki->curpos] = event->key.keysym.unicode;
if (atoi(ki->text) <= ki->maxlen)
ki->curpos++;
ki->text[ki->curpos] = 0;
ki->changed = 1;
}
}
else if (ki->type == KEYBI_float && (keyu == '-' || keyu == '.' || (keyu >= '0' && keyu <= '9'))) {
if (ki->curpos < 255) {
ki->text[ki->curpos++] = event->key.keysym.unicode;
ki->text[ki->curpos] = 0;
ki->changed = 1;
}
}
ki->len = strlen (ki->text);
}
if (keybinput_oldkey == SDLK_RETURN && event->type == SDL_KEYUP)
keyu = 1;
else if (keybinput_oldkey == SDLK_ESCAPE && event->type == SDL_KEYUP)
keyu = -1;
else
keyu = 0;
if (event->type == SDL_KEYUP)
keybinput_oldkey = 0;
return keyu;
*/
int main (int argc, char **argv) { int main (int argc, char **argv) {
SDL_Surface *scr; SDL_Surface *scr;
@ -192,7 +267,8 @@ int main (int argc, char **argv) {
SDL_Quit(); SDL_Quit();
exit (2); exit (2);
} }
SDL_EnableUNICODE(1);
app_init (argc, argv); app_init (argc, argv);
font_init (); font_init ();
gfx_init (RESOLUTION_X, RESOLUTION_Y); gfx_init (RESOLUTION_X, RESOLUTION_Y);

@ -568,4 +568,3 @@ void main_wnd_update () {
DispatchMessage(&message); DispatchMessage(&message);
} }
}; };

Loading…
Cancel
Save