X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fgadgets.c;h=aacadafad4cfec7fd7d80e42199eae8294ebc91b;hb=10b9382e55f3a8cd0a15644cf1ed6e1451654a76;hp=55174eef8b749c09812f870cd7d2059d33f11205;hpb=274935f49f49068998ad7b4ed9d93892aedfc6aa;p=rocksndiamonds.git diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 55174eef..aacadafa 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -105,8 +105,6 @@ static struct GadgetInfo *getGadgetInfoFromMousePosition(int mx, int my) return NULL; } -#if 1 - static void setTextAreaCursorExt(struct GadgetInfo *gi, boolean set_cursor_pos) { char *text = gi->textarea.value; @@ -147,15 +145,6 @@ static void setTextAreaCursorExt(struct GadgetInfo *gi, boolean set_cursor_pos) pos++; } - if (y >= area_ysize) - { - x = area_xsize - 1; - } - -#if 0 - printf("::: %d, %d [%d]\n", cursor_x, cursor_y, cursor_position); -#endif - gi->textarea.cursor_x = x; gi->textarea.cursor_y = y; gi->textarea.cursor_x_preferred = x; @@ -177,98 +166,6 @@ static void setTextAreaCursorPosition(struct GadgetInfo *gi, int pos) setTextAreaCursorExt(gi, FALSE); } -#else - -static void setTextAreaCursorPosition(struct GadgetInfo *gi, int x, int y) -{ - char *text = gi->textarea.value; - int area_xsize = gi->textarea.xsize; - int area_ysize = gi->textarea.ysize; - int cursor_x = 0; - int cursor_y = 0; - int cursor_position = 0; - - while (*text && cursor_y < area_ysize) - { - char buffer[MAX_OUTPUT_LINESIZE + 1]; - int i; - - for (i=0; i < area_xsize && *text && *text != '\n'; i++) - buffer[i] = *text++; - buffer[i] = '\0'; - -#if 1 - if (i == 0 && *text == '\n') - { - text++; - cursor_position++; - } -#endif - - if (x == -1 && y == -1) /* get x/y from cursor position */ - { - if (cursor_position + i >= gi->textarea.cursor_position) - { -#if 0 - printf("::: cursor: %d + %d >= %d\n", cursor_position, i, - gi->textarea.cursor_position); -#endif - - cursor_x = gi->textarea.cursor_position - cursor_position; - cursor_position = gi->textarea.cursor_position; - - break; - } - } - - if (cursor_y == y || !*text) /* correct y position found */ - { - cursor_x = MIN(i, x); - cursor_position += cursor_x; - - break; - } - else - cursor_position += i; - -#if 0 - if (*text == '\n') - { - text++; - cursor_position++; - - if (i == area_xsize) - cursor_y++; - } -#endif - - cursor_y++; - } - - if (cursor_x >= area_xsize) - { - cursor_x = 0; - cursor_y++; - } - - if (cursor_y >= area_ysize) - { - cursor_x = area_xsize - 1; - cursor_y = area_ysize - 1; - } - -#if 0 - printf("::: %d, %d [%d]\n", cursor_x, cursor_y, cursor_position); -#endif - - gi->textarea.cursor_x = cursor_x; - gi->textarea.cursor_y = cursor_y; - gi->textarea.cursor_x_preferred = cursor_x; - gi->textarea.cursor_position = cursor_position; -} - -#endif - static void default_callback_info(void *ptr) { return; @@ -378,11 +275,6 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) cursor_string[0] = (cursor_letter != '\0' ? cursor_letter : ' '); cursor_string[1] = '\0'; -#if 0 - if (pressed) - printf("::: PRESSED!\n"); -#endif - /* draw cursor, if active */ if (pressed) DrawTextExt(drawto, @@ -473,14 +365,6 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) cursor_string[0] = (cursor_letter != '\0' ? cursor_letter : ' '); cursor_string[1] = '\0'; -#if 0 - printf("::: '%s' [%d, %d] [%d] [%d -> '%s']\n", - gi->textarea.value, - gi->textarea.cursor_x, gi->textarea.cursor_y, - gi->textarea.cursor_position, - pressed, cursor_string); -#endif - /* draw cursor, if active */ if (pressed) DrawTextExt(drawto, @@ -635,7 +519,10 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) /* selectbox text values */ for (i=0; i < gi->selectbox.num_values; i++) { - int mask_mode; + int mask_mode = BLIT_MASKED; + + strncpy(text, gi->selectbox.options[i].text, gi->selectbox.size); + text[gi->selectbox.size] = '\0'; if (i == gi->selectbox.current_index) { @@ -645,17 +532,11 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) gi->selectbox.width - 2 * border_x, font_height, gi->selectbox.inverse_color); - strncpy(text, gi->selectbox.options[i].text, gi->selectbox.size); - text[1 + gi->selectbox.size] = '\0'; - - mask_mode = BLIT_INVERSE; - } - else - { - strncpy(text, gi->selectbox.options[i].text, gi->selectbox.size); + /* prevent use of cursor graphic by drawing at least two chars */ + strcat(text, " "); text[gi->selectbox.size] = '\0'; - mask_mode = BLIT_MASKED; + mask_mode = BLIT_INVERSE; } DrawTextExt(drawto, @@ -1467,10 +1348,6 @@ void HandleGadgets(int mx, int my, int button) last_mx = mx; last_my = my; -#if 1 - -#if 1 - /* if mouse button pressed outside text or selectbox gadget, deactivate it */ if (anyTextGadgetActive() && button != 0 && !motion_status && new_gi != last_gi) @@ -1487,171 +1364,6 @@ void HandleGadgets(int mx, int my, int button) last_gi = NULL; } -#else - - /* special treatment for leaving text and number input gadgets */ - if (anyTextInputGadgetActive() && - button != 0 && !motion_status && new_gi != last_gi) - { - /* if mouse button pressed outside text input gadget, deactivate it */ - CheckRangeOfNumericInputGadget(last_gi); - DrawGadget(last_gi, DG_UNPRESSED, last_gi->direct_draw); - - last_gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (last_gi->event_mask & GD_EVENT_TEXT_LEAVING) - last_gi->callback_action(last_gi); - - last_gi = NULL; - } - - /* special treatment for leaving text area gadgets */ - if (anyTextAreaGadgetActive() && - button != 0 && !motion_status && new_gi != last_gi) - { - /* if mouse button pressed outside text input gadget, deactivate it */ - DrawGadget(last_gi, DG_UNPRESSED, last_gi->direct_draw); - - last_gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (last_gi->event_mask & GD_EVENT_TEXT_LEAVING) - last_gi->callback_action(last_gi); - - last_gi = NULL; - } - - /* special treatment for leaving selectbox gadgets */ - if (anySelectboxGadgetActive() && - button != 0 && !motion_status && new_gi != last_gi) - { - /* if mouse button pressed outside selectbox gadget, deactivate it */ - DrawGadget(last_gi, DG_UNPRESSED, last_gi->direct_draw); - - last_gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (last_gi->event_mask & GD_EVENT_TEXT_LEAVING) - last_gi->callback_action(last_gi); - - last_gi = NULL; - } - -#endif - -#else - - /* special treatment for text and number input gadgets */ - if (anyTextInputGadgetActive() && button != 0 && !motion_status) - { - struct GadgetInfo *gi = last_gi; - - if (new_gi == last_gi) - { - int old_cursor_position = gi->textinput.cursor_position; - - /* if mouse button pressed inside activated text gadget, set cursor */ - gi->textinput.cursor_position = - (mx - gi->x - gi->border.xsize) / getFontWidth(gi->font); - - if (gi->textinput.cursor_position < 0) - gi->textinput.cursor_position = 0; - else if (gi->textinput.cursor_position > strlen(gi->textinput.value)) - gi->textinput.cursor_position = strlen(gi->textinput.value); - - if (gi->textinput.cursor_position != old_cursor_position) - DrawGadget(gi, DG_PRESSED, gi->direct_draw); - } - else - { - /* if mouse button pressed outside text input gadget, deactivate it */ - CheckRangeOfNumericInputGadget(gi); - DrawGadget(gi, DG_UNPRESSED, gi->direct_draw); - - gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (gi->event_mask & GD_EVENT_TEXT_LEAVING) - gi->callback_action(gi); - - last_gi = NULL; - } - } - - /* special treatment for text area gadgets */ - if (anyTextAreaGadgetActive() && button != 0 && !motion_status) - { - struct GadgetInfo *gi = last_gi; - - if (new_gi == last_gi) - { - int old_cursor_position = gi->textarea.cursor_position; - int x = (mx - gi->x - gi->border.xsize) / getFontWidth(gi->font); - int y = (my - gi->y - gi->border.ysize) / getFontHeight(gi->font); - - x = (x < 0 ? 0 : x >= gi->textarea.xsize ? gi->textarea.xsize - 1 : x); - y = (y < 0 ? 0 : y >= gi->textarea.ysize ? gi->textarea.ysize - 1 : y); - - setTextAreaCursorXY(gi, x, y); - -#if 0 - printf("::: %d -----> %d\n", - old_cursor_position, - gi->textarea.cursor_position); -#endif - - if (gi->textarea.cursor_position != old_cursor_position) - DrawGadget(gi, DG_PRESSED, gi->direct_draw); - } - else - { - /* if mouse button pressed outside text input gadget, deactivate it */ - DrawGadget(gi, DG_UNPRESSED, gi->direct_draw); - - gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (gi->event_mask & GD_EVENT_TEXT_LEAVING) - gi->callback_action(gi); - - last_gi = NULL; - } - } - - /* special treatment for selectbox gadgets */ - if (anySelectboxGadgetActive() && button != 0 && !motion_status) - { - struct GadgetInfo *gi = last_gi; - - if (new_gi == last_gi) - { - int old_index = gi->selectbox.current_index; - - /* if mouse button pressed inside activated selectbox, select value */ - if (my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height) - gi->selectbox.current_index = - (my - gi->selectbox.y - gi->border.ysize) / getFontHeight(gi->font); - - if (gi->selectbox.current_index < 0) - gi->selectbox.current_index = 0; - else if (gi->selectbox.current_index > gi->selectbox.num_values - 1) - gi->selectbox.current_index = gi->selectbox.num_values - 1; - - if (gi->selectbox.current_index != old_index) - DrawGadget(gi, DG_PRESSED, gi->direct_draw); - } - else - { - /* if mouse button pressed outside selectbox gadget, deactivate it */ - DrawGadget(gi, DG_UNPRESSED, gi->direct_draw); - - gi->event.type = GD_EVENT_TEXT_LEAVING; - - if (gi->event_mask & GD_EVENT_TEXT_LEAVING) - gi->callback_action(gi); - - last_gi = NULL; - } - } - -#endif - gadget_pressed = (button != 0 && last_gi == NULL && new_gi != NULL && press_event); gadget_pressed_repeated = @@ -1789,15 +1501,6 @@ void HandleGadgets(int mx, int my, int button) { last_info_gi->event.type = GD_EVENT_INFO_LEAVING; last_info_gi->callback_info(last_info_gi); - -#if 0 - default_callback_info(NULL); - - printf("It seems that we are leaving gadget [%s]!\n", - (last_info_gi != NULL && - last_info_gi->info_text != NULL ? - last_info_gi->info_text : "")); -#endif } last_info_gi = new_gi; @@ -1891,7 +1594,6 @@ void HandleGadgets(int mx, int my, int button) } } - /* !!! bad for TEXT_INPUT ... !!! */ DrawGadget(gi, DG_PRESSED, gi->direct_draw); gi->state = GD_BUTTON_PRESSED; @@ -1906,11 +1608,6 @@ void HandleGadgets(int mx, int my, int button) gi->callback_action(gi); } -#if 0 - if (!mouse_moving) - printf("::: PRESSED...?\n"); -#endif - if (gadget_pressed_repeated) { gi->event.type = GD_EVENT_PRESSED; @@ -2035,18 +1732,10 @@ static void insertCharIntoTextArea(struct GadgetInfo *gi, char c) if (strlen(gi->textarea.value) == MAX_GADGET_TEXTSIZE) /* no space left */ return; -#if 0 - printf("::: '%s' + '%c'", gi->textarea.value, c); -#endif - strcpy(text, gi->textarea.value); strcpy(&gi->textarea.value[cursor_position + 1], &text[cursor_position]); gi->textarea.value[cursor_position] = c; -#if 0 - printf(" => '%s'\n", gi->textarea.value); -#endif - setTextAreaCursorPosition(gi, gi->textarea.cursor_position + 1); } @@ -2143,10 +1832,6 @@ void HandleGadgetsKeyInput(Key key) char letter = getCharFromKey(key); boolean legal_letter = (letter != 0); -#if 0 - printf("::: KEY: %x!\n", key); -#endif - if (legal_letter) { insertCharIntoTextArea(gi, letter);