From cff2c9a7cf478d37aca765f1659344fe394703bb Mon Sep 17 00:00:00 2001 From: steffen Date: Thu, 28 Feb 2013 23:19:59 +0000 Subject: [PATCH] guientry fixed.. also some other little bugfixes.. --- gui/gui.c | 8 ++++- gui/gui.h | 4 +-- gui/gui_entry.c | 49 ++++++++++++++++------------ gui/gui_window.c | 3 +- main/gui_config.c | 13 ++++++-- sdlgl/sdl_main.c | 80 ++++++++++++++++++++++++++++++++++++++++++++-- wince/wince_main.c | 1 - 7 files changed, 128 insertions(+), 30 deletions(-) diff --git a/gui/gui.c b/gui/gui.c index e73cc5e..a386eb4 100644 --- a/gui/gui.c +++ b/gui/gui.c @@ -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 * @@ -208,3 +208,9 @@ void gui_event_addmousepos (GUIEvent *event, iPoint pos, int neg) { event->mousepos.y += neg ? pos.y : -pos.y; return; }; + + +void gui_set_focus (GUIItem *item) { + currentwin->focus = item; + currentwin->screen_changed = 1; +}; \ No newline at end of file diff --git a/gui/gui.h b/gui/gui.h index 2f8c5e5..93093c5 100644 --- a/gui/gui.h +++ b/gui/gui.h @@ -32,8 +32,7 @@ enum { EGUI_NONE, - EGUI_KEYPRESSED, - EGUI_KEYRELEASED, + EGUI_KEYCHAR, EGUI_MOUSEMOVE, EGUI_MOUSEPRESSED, EGUI_MOUSERELEASED @@ -141,6 +140,7 @@ extern void gui_draw (); extern void gui_close (); extern int gui_event (GUIEvent event); 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_close (GUIWindow *win); diff --git a/gui/gui_entry.c b/gui/gui_entry.c index 9fa566d..6da7be3 100644 --- a/gui/gui_entry.c +++ b/gui/gui_entry.c @@ -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 * @@ -38,6 +38,9 @@ void gui_entry_draw (GUIItem *item) { GUIEntry *entry = NULL; if (item) entry = (GUIEntry *) item->data; + else return; + + d_printf ("draw entry: curpos:%d", entry->curpos); ls.width = 1.0; if (currentwin->focus == (void*) item) @@ -69,40 +72,44 @@ void gui_entry_draw (GUIItem *item) { */ void gui_entry_event (GUIItem *item, GUIEvent *event) { char text1[GUI_TEXTLEN]; + char text2[GUI_TEXTLEN]; GUIEntry *entry = NULL; 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) { - d_printf ("gui_entry_event set focus"); - currentwin->focus = item; - } + if (event->event == EGUI_MOUSERELEASED) gui_set_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); - if (event->keyval == 0xff08) { // backspace -// strncpy (text1, entry->text, entry->curpos-1); -// snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos); -// strncpy (entry->text, text2, GUI_TEXTLEN); -// entry->curpos--; - entry->text[0] = 0; - entry->curpos = 0; + if (event->keyval == 0x08) { // backspace + if (entry->curpos > 0) { + memset (text1, 0x0, GUI_TEXTLEN); + memset (text2, 0x0, GUI_TEXTLEN); + strncpy (text1, entry->text, entry->curpos-1); + snprintf (text2, GUI_TEXTLEN, "%s%s", text1, entry->text+entry->curpos); + 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 (); } - else if (event->keyval == 0xff0d) { // enter + else if (event->keyval == 0x0d) { // enter if (entry->callback_enter) entry->callback_enter (); } - else if (event->keyval == 0xff51) { // left -// entry->curpos--; + else if (event->keyval == 0x51) { // left + entry->curpos--; } - else if (event->keyval == 0xff53) { // right -// entry->curpos++; + else if (event->keyval == 0x53) { // right + entry->curpos++; } - else if ((event->keyval & 0xff00) == 0xff00) { + else if ((event->keyval & 0x00) == 0xff00) { // ignore all the rest } else { diff --git a/gui/gui_window.c b/gui/gui_window.c index 05f80a2..e3356b4 100644 --- a/gui/gui_window.c +++ b/gui/gui_window.c @@ -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 * @@ -87,6 +87,7 @@ void gui_window_item_add (GUIWindow *win, GUIItem *item) { } win->items[ifree] = item; + win->screen_changed = 1; d_printf ("gui_window_item_add win:%p ifree:%d item:%p", win, ifree, item); }; diff --git a/main/gui_config.c b/main/gui_config.c index cbf1c75..27deed4 100644 --- a/main/gui_config.c +++ b/main/gui_config.c @@ -27,6 +27,7 @@ #include "system.h" void gui_config_close (); +void gui_config_seldir (); GUIWindow wcfg = {0}; @@ -44,9 +45,12 @@ void gui_config_show () { wcfg.style = WGUI_S_VCENTER | WGUI_S_HCENTER; 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); - + 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 (); }; + +void gui_config_seldir () { + d_printf ("select dir..."); +}; + diff --git a/sdlgl/sdl_main.c b/sdlgl/sdl_main.c index d900bb8..af8a171 100644 --- a/sdlgl/sdl_main.c +++ b/sdlgl/sdl_main.c @@ -114,6 +114,7 @@ int msdl_eventloop () { SDL_Event event, lastevent; int gotevent = 0, keeppoll = 1; GUIEvent gevent; + static int oldkey = 0; while (keeppoll && SDL_PollEvent (&lastevent)) { event = lastevent; @@ -163,8 +164,20 @@ int msdl_eventloop () { gui_event (gevent); 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: + oldkey = 0; break; 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) { SDL_Surface *scr; @@ -192,7 +267,8 @@ int main (int argc, char **argv) { SDL_Quit(); exit (2); } - + SDL_EnableUNICODE(1); + app_init (argc, argv); font_init (); gfx_init (RESOLUTION_X, RESOLUTION_Y); diff --git a/wince/wince_main.c b/wince/wince_main.c index ebd9593..c9734db 100644 --- a/wince/wince_main.c +++ b/wince/wince_main.c @@ -568,4 +568,3 @@ void main_wnd_update () { DispatchMessage(&message); } }; -