X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=30159ccf36bd7578f7e7c1641c8498de617deaea;hb=730e92ef422a3be2315067584eaeb7dc6585b6f4;hp=a18d8d4a11462d51d6db46837036e5cd095cbd2f;hpb=9321693882ca8055e45409f622bd85af655c9fde;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index a18d8d4a..30159ccf 100644 --- a/src/screens.c +++ b/src/screens.c @@ -130,6 +130,9 @@ #define MENU_CHOOSE_TREE_FONT(x) (FONT_TEXT_1 + (x)) #define MENU_CHOOSE_TREE_COLOR(ti, a) TREE_COLOR(ti, a) +#define TEXT_NEXT_PAGE "Press any key or button for next page" +#define TEXT_INFO_MENU "Press any key or button for info menu" + // for input setup functions #define SETUPINPUT_SCREEN_POS_START 0 #define SETUPINPUT_SCREEN_POS_EMPTY1 3 @@ -188,27 +191,28 @@ #define SCREEN_CTRL_ID_NEXT_LEVEL2 3 #define SCREEN_CTRL_ID_PREV_SCORE 4 #define SCREEN_CTRL_ID_NEXT_SCORE 5 -#define SCREEN_CTRL_ID_FIRST_LEVEL 6 -#define SCREEN_CTRL_ID_LAST_LEVEL 7 -#define SCREEN_CTRL_ID_LEVEL_NUMBER 8 -#define SCREEN_CTRL_ID_PREV_PLAYER 9 -#define SCREEN_CTRL_ID_NEXT_PLAYER 10 -#define SCREEN_CTRL_ID_INSERT_SOLUTION 11 -#define SCREEN_CTRL_ID_PLAY_SOLUTION 12 -#define SCREEN_CTRL_ID_SWITCH_ECS_AGA 13 -#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE 14 -#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE 15 -#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE2 16 -#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE2 17 - -#define NUM_SCREEN_MENUBUTTONS 18 - -#define SCREEN_CTRL_ID_SCROLL_UP 18 -#define SCREEN_CTRL_ID_SCROLL_DOWN 19 -#define SCREEN_CTRL_ID_SCROLL_VERTICAL 20 -#define SCREEN_CTRL_ID_NETWORK_SERVER 21 - -#define NUM_SCREEN_GADGETS 22 +#define SCREEN_CTRL_ID_PLAY_TAPE 6 +#define SCREEN_CTRL_ID_FIRST_LEVEL 7 +#define SCREEN_CTRL_ID_LAST_LEVEL 8 +#define SCREEN_CTRL_ID_LEVEL_NUMBER 9 +#define SCREEN_CTRL_ID_PREV_PLAYER 10 +#define SCREEN_CTRL_ID_NEXT_PLAYER 11 +#define SCREEN_CTRL_ID_INSERT_SOLUTION 12 +#define SCREEN_CTRL_ID_PLAY_SOLUTION 13 +#define SCREEN_CTRL_ID_SWITCH_ECS_AGA 14 +#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE 15 +#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE 16 +#define SCREEN_CTRL_ID_TOUCH_PREV_PAGE2 17 +#define SCREEN_CTRL_ID_TOUCH_NEXT_PAGE2 18 + +#define NUM_SCREEN_MENUBUTTONS 19 + +#define SCREEN_CTRL_ID_SCROLL_UP 19 +#define SCREEN_CTRL_ID_SCROLL_DOWN 20 +#define SCREEN_CTRL_ID_SCROLL_VERTICAL 21 +#define SCREEN_CTRL_ID_NETWORK_SERVER 22 + +#define NUM_SCREEN_GADGETS 23 #define NUM_SCREEN_SCROLLBUTTONS 2 #define NUM_SCREEN_SCROLLBARS 1 @@ -296,7 +300,8 @@ static void MapScreenTreeGadgets(TreeInfo *); static void UnmapScreenTreeGadgets(void); static void UpdateScreenMenuGadgets(int, boolean); -static void AdjustScoreInfoButtons(int, int, int); +static void AdjustScoreInfoButtons_SelectScore(int, int, int); +static void AdjustScoreInfoButtons_PlayTape(int, int); static boolean OfferUploadTapes(void); static void execOfferUploadTapes(void); @@ -2922,8 +2927,7 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) DrawTextSCentered(ystart1, font_title, text_title); DrawTextSCentered(ystart2, font_error, text_error); - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for info menu"); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); FadeIn(REDRAW_FIELD); } @@ -2954,9 +2958,7 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) DrawHeadline(); DrawTextSCentered(ystart1, font_title, "The Game Elements:"); - - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for next page"); + DrawTextSCentered(ybottom, font_foot, TEXT_NEXT_PAGE); FrameCounter = 0; } @@ -3242,11 +3244,8 @@ void HandleInfoScreen_Music(int dx, int dy, int button) ClearField(); DrawHeadline(); - DrawTextSCentered(ystart, font_title, - "No music info for this level set."); - - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for info menu"); + DrawTextSCentered(ystart, font_title, "No music info for this level set."); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); return; } @@ -3370,8 +3369,7 @@ void HandleInfoScreen_Music(int dx, int dy, int button) ystart += ystep_head; } - DrawTextSCentered(ybottom, FONT_TEXT_4, - "Press any key or button for next page"); + DrawTextSCentered(ybottom, font_foot, TEXT_NEXT_PAGE); if (button != MB_MENU_INITIALIZE) FadeIn(REDRAW_FIELD); @@ -3412,8 +3410,10 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) filename, font_text, chars, -1, lines, line_spacing, -1, autowrap, centered, parse_comments); - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for next page"); + boolean last_screen = (screen_nr == num_credits_screens - 1); + char *text_foot = (last_screen ? TEXT_INFO_MENU : TEXT_NEXT_PAGE); + + DrawTextSCentered(ybottom, font_foot, text_foot); } static void DrawInfoScreen_Credits(void) @@ -3461,11 +3461,8 @@ void HandleInfoScreen_Credits(int dx, int dy, int button) ClearField(); DrawHeadline(); - DrawTextSCentered(ystart, font_title, - "No credits for this level set."); - - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for info menu"); + DrawTextSCentered(ystart, font_title, "No credits for this level set."); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); return; } @@ -3544,8 +3541,10 @@ static void DrawInfoScreen_ProgramScreen(int screen_nr) filename, font_text, chars, -1, lines, line_spacing, -1, autowrap, centered, parse_comments); - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for next page"); + boolean last_screen = (screen_nr == num_program_info_screens - 1); + char *text_foot = (last_screen ? TEXT_INFO_MENU : TEXT_NEXT_PAGE); + + DrawTextSCentered(ybottom, font_foot, text_foot); } static void DrawInfoScreen_Program(void) @@ -3583,11 +3582,8 @@ void HandleInfoScreen_Program(int dx, int dy, int button) ClearField(); DrawHeadline(); - DrawTextSCentered(ystart, font_title, - "No program info available."); - - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for info menu"); + DrawTextSCentered(ystart, font_title, "No program info available."); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); return; } @@ -3800,8 +3796,7 @@ static void DrawInfoScreen_Version(void) DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_audiodriver); DrawTextF(xstart3, ystart, font_text, "%s", driver_name); - DrawTextSCentered(ybottom, font_foot, - "Press any key or button for info menu"); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); FadeIn(REDRAW_FIELD); } @@ -3837,6 +3832,7 @@ static void DrawInfoScreen_LevelSet(void) struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); char *title = "Level Set Information:"; + int font_foot = MENU_INFO_FONT_FOOT; int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; @@ -3888,8 +3884,7 @@ static void DrawInfoScreen_LevelSet(void) filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1, tmi->autowrap, tmi->centered, tmi->parse_comments); - DrawTextSCentered(ybottom, FONT_TEXT_4, - "Press any key or button for info menu"); + DrawTextSCentered(ybottom, font_foot, TEXT_INFO_MENU); FadeIn(REDRAW_FIELD); } @@ -5780,10 +5775,13 @@ static void DrawScoreInfo_Content(int entry_nr) int ybottom = mSY - SY + SYSIZE - menu.bottom_spacing[GAME_MODE_SCOREINFO]; int xstart1 = mSX - SX + 2 * xstep; int xstart2 = mSX - SX + 13 * xstep; - int button_x = SX + xstart1; - int button_y1, button_y2; + int select_x = SX + xstart1; + int select_y1, select_y2; + int play_x, play_y; + int play_height = screen_gadget[SCREEN_CTRL_ID_PLAY_TAPE]->height; int font_width = getFontWidth(font_text); int font_height = getFontHeight(font_text); + int tape_date_width = getTextWidth(entry->tape_date, font_text); int pad_left = xstart2; int pad_right = MENU_SCREEN_INFO_SPACE_RIGHT; int max_chars_per_line = (SXSIZE - pad_left - pad_right) / font_width; @@ -5820,7 +5818,7 @@ static void DrawScoreInfo_Content(int entry_nr) TRUE, FALSE, FALSE); ystart += ystep_para + (lines > 0 ? lines - 1 : 0) * font_height; - button_y1 = SY + ystart; + select_y1 = SY + ystart; ystart += graphic_info[IMG_MENU_BUTTON_PREV_SCORE].height; DrawTextF(xstart1, ystart, font_head, "Rank"); @@ -5853,6 +5851,9 @@ static void DrawScoreInfo_Content(int entry_nr) ystart += ystep_line; + play_x = SX + xstart2 + tape_date_width + font_width; + play_y = SY + ystart + (font_height - play_height) / 2; + DrawTextF(xstart1, ystart, font_head, "Tape Date"); DrawTextF(xstart2, ystart, font_text, entry->tape_date); ystart += ystep_line; @@ -5871,11 +5872,12 @@ static void DrawScoreInfo_Content(int entry_nr) TRUE, FALSE, FALSE); ystart += ystep_line; - button_y2 = SY + ystart; + select_y2 = SY + ystart; DrawTextSCentered(ybottom, font_foot, "Press any key or button to go back"); - AdjustScoreInfoButtons(button_x, button_y1, button_y2); + AdjustScoreInfoButtons_SelectScore(select_x, select_y1, select_y2); + AdjustScoreInfoButtons_PlayTape(play_x, play_y); } static void DrawScoreInfo(int entry_nr) @@ -5916,6 +5918,10 @@ static void HandleScoreInfo_SelectScore(int step, int direction) } } +static void HandleScoreInfo_PlayTape(void) +{ +} + void HandleScoreInfo(int mx, int my, int dx, int dy, int button) { boolean button_action = (button == MB_MENU_LEAVE || button == MB_MENU_CHOICE); @@ -9815,6 +9821,14 @@ static struct GD_EVENT_PRESSED | GD_EVENT_REPEATED, FALSE, "next score" }, + { + IMG_MENU_BUTTON_PLAY_TAPE, IMG_MENU_BUTTON_PLAY_TAPE, + &menu.scores.button.play_tape, NULL, + SCREEN_CTRL_ID_PLAY_TAPE, + SCREEN_MASK_SCORES_INFO, + GD_EVENT_RELEASED, + FALSE, "play tape" + }, { IMG_MENU_BUTTON_FIRST_LEVEL, IMG_MENU_BUTTON_FIRST_LEVEL_ACTIVE, &menu.main.button.first_level, NULL, @@ -9988,6 +10002,8 @@ static void CreateScreenMenubuttons(void) boolean is_touch_button = menubutton_info[i].is_touch_button; boolean is_check_button = menubutton_info[i].check_value != NULL; boolean is_score_button = (screen_mask & SCREEN_MASK_SCORES_INFO); + boolean has_gfx_pressed = (menubutton_info[i].gfx_pressed == + menubutton_info[i].gfx_unpressed); Bitmap *gd_bitmap_unpressed, *gd_bitmap_pressed; int gfx_unpressed, gfx_pressed; int x, y, width, height; @@ -10018,7 +10034,7 @@ static void CreateScreenMenubuttons(void) gd_x2a = gd_x2; gd_y2a = gd_y2; - if (is_touch_button) + if (has_gfx_pressed) { gd_x2 += graphic_info[gfx_pressed].pressed_xoffset; gd_y2 += graphic_info[gfx_pressed].pressed_yoffset; @@ -10372,7 +10388,7 @@ static void UnmapScreenTreeGadgets(void) UnmapScreenGadgets(); } -static void AdjustScoreInfoButtons(int x, int y1, int y2) +static void AdjustScoreInfoButtons_SelectScore(int x, int y1, int y2) { struct GadgetInfo *gi_1 = screen_gadget[SCREEN_CTRL_ID_PREV_SCORE]; struct GadgetInfo *gi_2 = screen_gadget[SCREEN_CTRL_ID_NEXT_SCORE]; @@ -10386,6 +10402,15 @@ static void AdjustScoreInfoButtons(int x, int y1, int y2) ModifyGadget(gi_2, GDI_X, x, GDI_Y, y2, GDI_END); } +static void AdjustScoreInfoButtons_PlayTape(int x, int y) +{ + struct GadgetInfo *gi = screen_gadget[SCREEN_CTRL_ID_PLAY_TAPE]; + struct MenuPosInfo *pos = menubutton_info[SCREEN_CTRL_ID_PLAY_TAPE].pos; + + if (pos->x == -1 && pos->y == -1) + ModifyGadget(gi, GDI_X, x, GDI_Y, y, GDI_END); +} + static void HandleScreenGadgets(struct GadgetInfo *gi) { int id = gi->custom_id; @@ -10420,6 +10445,10 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) HandleScoreInfo_SelectScore(step, +1); break; + case SCREEN_CTRL_ID_PLAY_TAPE: + HandleScoreInfo_PlayTape(); + break; + case SCREEN_CTRL_ID_FIRST_LEVEL: HandleMainMenu_SelectLevel(MAX_LEVELS, -1, NO_DIRECT_LEVEL_SELECT); break;