X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=ball%2Fst_name.c;h=b454745b751b06093f38265123d71ed781388b21;hb=1745b6a90dfd9e626e5c40d20c6aa595ec41d888;hp=828b1705c6341adb3ac74671e4d2b0ac415f3bf2;hpb=842b55e2f6ed8243c9f2b5bea7950ed3a0b18423;p=neverball diff --git a/ball/st_name.c b/ball/st_name.c index 828b170..b454745 100644 --- a/ball/st_name.c +++ b/ball/st_name.c @@ -20,6 +20,8 @@ #include "audio.h" #include "config.h" #include "game.h" +#include "text.h" +#include "back.h" #include "st_name.h" #include "st_shared.h" @@ -31,34 +33,34 @@ static char player[MAXNAM]; /*---------------------------------------------------------------------------*/ static struct state *ok_state, *cancel_state; +static unsigned int draw_back; -int goto_name(struct state *ok, struct state *cancel) +int goto_name(struct state *ok, struct state *cancel, unsigned int back) { config_get_s(CONFIG_PLAYER, player, MAXNAM); ok_state = ok; cancel_state = cancel; + draw_back = back; return goto_state(&st_name); } /*---------------------------------------------------------------------------*/ -#define NAME_OK 1 -#define NAME_CANCEL 2 +#define NAME_OK -1 +#define NAME_CANCEL -2 static int name_id; static int name_action(int i) { - size_t l = strlen(player); - audio_play(AUD_MENU, 1.0f); switch (i) { case NAME_OK: - if (l == 0) + if (strlen(player) == 0) return 1; config_set_s(CONFIG_PLAYER, player); @@ -73,21 +75,13 @@ static int name_action(int i) break; case GUI_BS: - if (l > 0) - { - player[l - 1] = '\0'; + if (text_del_char(player)) gui_set_label(name_id, player); - } break; default: - if (l < MAXNAM - 1) - { - player[l + 0] = (char) i; - player[l + 1] = '\0'; - + if (text_add_char(i, player, MAXNAM, 17)) gui_set_label(name_id, player); - } } return 1; } @@ -98,6 +92,12 @@ static int name_enter(void) { int id, jd; + if (draw_back) + { + game_free(); + back_init("back/gui.png", config_get_d(CONFIG_GEOMETRY)); + } + if ((id = gui_vstack(0))) { gui_label(id, _("Player Name"), GUI_MED, GUI_ALL, 0, 0); @@ -108,10 +108,12 @@ static int name_enter(void) gui_space(id); gui_keyboard(id); + gui_space(id); if ((jd = gui_harray(id))) { enter_id = gui_start(jd, _("OK"), GUI_SML, NAME_OK, 0); + gui_space(jd); gui_state(jd, _("Cancel"), GUI_SML, NAME_CANCEL, 0); } @@ -125,19 +127,38 @@ static int name_enter(void) static void name_leave(int id) { + if (draw_back) + back_free(); + SDL_EnableUNICODE(0); gui_delete(id); } +static void name_paint(int id, float t) +{ + if (draw_back) + { + config_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); + { + back_draw(0); + } + config_pop_matrix(); + } + else + game_draw(0, t); + + gui_paint(id); +} + static int name_keybd(int c, int d) { - if (d && (c & 0xFF80) == 0) + if (d) { gui_focus(enter_id); if (c == '\b' || c == 0x7F) return name_action(GUI_BS); - if (c > ' ') + if (c >= ' ') return name_action(c); } return 1; @@ -151,9 +172,10 @@ static int name_buttn(int b, int d) { int c = gui_token(gui_click()); - /* Ugh. This is such a hack. */ - - return name_action(isupper(c) ? gui_keyboard_char(c) : c); + if (c >= 0 && !GUI_ISMSK(c)) + return name_action(gui_keyboard_char(c)); + else + return name_action(c); } if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b)) name_action(NAME_CANCEL); @@ -166,10 +188,11 @@ static int name_buttn(int b, int d) struct state st_name = { name_enter, name_leave, - shared_paint, + name_paint, shared_timer, shared_point, shared_stick, + shared_angle, shared_click, name_keybd, name_buttn,