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
*
@ -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;
};

@ -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);

@ -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 {

@ -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);
};

@ -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...");
};

@ -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);

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

Loading…
Cancel
Save