X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=4f711f26ce3f584cb9ef610085f925f4bf292f31;hb=40f85093a4a5f80c37d7a9847f5b10c230c76690;hp=e20f4deb67a8fe729b207733fdf6dfc5d83ad83b;hpb=f459d13abcc4b9966d23ff233201d77039b73777;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index e20f4deb..4f711f26 100644 --- a/src/screens.c +++ b/src/screens.c @@ -129,13 +129,16 @@ #define MENU_INFO_FONT_TEXT FONT_TEXT_3 #define MENU_INFO_FONT_FOOT FONT_TEXT_4 #define MENU_INFO_SPACE_HEAD (menu.headline2_spacing_info[info_mode]) -#define MENU_SCREEN_INFO_XSTART 16 -#define MENU_SCREEN_INFO_YSTART1 100 +#define MENU_SCREEN_INFO_SPACE_LEFT (menu.left_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_RIGHT (menu.right_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_TOP (menu.top_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_BOTTOM (menu.bottom_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_YSTART1 MENU_SCREEN_INFO_SPACE_TOP #define MENU_SCREEN_INFO_YSTART2 (MENU_SCREEN_INFO_YSTART1 + \ getMenuTextStep(MENU_INFO_SPACE_HEAD, \ MENU_INFO_FONT_TITLE)) #define MENU_SCREEN_INFO_YSTEP (TILEY + 4) -#define MENU_SCREEN_INFO_YBOTTOM (SYSIZE - 20) +#define MENU_SCREEN_INFO_YBOTTOM (SYSIZE - MENU_SCREEN_INFO_SPACE_BOTTOM) #define MENU_SCREEN_INFO_YSIZE (MENU_SCREEN_INFO_YBOTTOM - \ MENU_SCREEN_INFO_YSTART2 - \ TILEY / 2) @@ -2600,9 +2603,9 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) int font_foot = MENU_INFO_FONT_FOOT; int spacing_title = menu.headline1_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); - int ystart1 = mSY - SY + 100; + int ystart1 = mSY - SY + MENU_SCREEN_INFO_YSTART1; int ystart2 = ystart1 + ystep_title; - int ybottom = mSY - SY + SYSIZE - 20; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO); @@ -2626,7 +2629,7 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) static int infoscreen_frame[MAX_INFO_ELEMENTS_ON_SCREEN]; int font_title = MENU_INFO_FONT_TITLE; int font_foot = MENU_INFO_FONT_FOOT; - int xstart = mSX + MENU_SCREEN_INFO_XSTART; + int xstart = mSX + MENU_SCREEN_INFO_SPACE_LEFT; int ystart1 = mSY - SY + MENU_SCREEN_INFO_YSTART1; int ystart2 = mSY + MENU_SCREEN_INFO_YSTART2; int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; @@ -2756,11 +2759,12 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos) int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); int yoffset = (TILEX - 2 * font_height) / 2; - int xstart = mSX + MINI_TILEX + TILEX + MINI_TILEX; + int xstart = mSX + MENU_SCREEN_INFO_SPACE_LEFT + TILEX + MINI_TILEX; int ystart = mSY + MENU_SCREEN_INFO_YSTART2 + yoffset; int ystep = TILEY + 4; - int pad_x = xstart - SX; - int max_chars_per_line = (SXSIZE - pad_x - MINI_TILEX) / font_width; + int pad_left = xstart - SX; + int pad_right = MENU_SCREEN_INFO_SPACE_RIGHT; + int max_chars_per_line = (SXSIZE - pad_left - pad_right) / font_width; int max_lines_per_text = 2; char *text = NULL; @@ -2919,8 +2923,8 @@ void HandleInfoScreen_Music(int button) int spacing_head = menu.headline2_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); int ystep_head = getMenuTextStep(spacing_head, font_head); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; if (button == MB_MENU_INITIALIZE) { @@ -3081,8 +3085,8 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; ClearField(); DrawHeadline(); @@ -3382,8 +3386,8 @@ void DrawInfoScreen_Program() int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); @@ -3468,8 +3472,8 @@ void DrawInfoScreen_Version() int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; int xstart1 = mSX - SX + 2 * xstep; int xstart2 = mSX - SX + 18 * xstep; int xstart3 = mSX - SX + 28 * xstep; @@ -3655,8 +3659,8 @@ void DrawInfoScreen_LevelSet() struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); char *title = "Level Set Information:"; - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; if (filename == NULL) { @@ -3688,7 +3692,7 @@ void DrawInfoScreen_LevelSet() /* if height set to "-1", automatically determine by playfield height */ if (tmi->height == -1) - tmi->height = SYSIZE - 20 - tmi->y - 10; + tmi->height = MENU_SCREEN_INFO_YBOTTOM - tmi->y - 10; /* if chars set to "-1", automatically determine by text and font width */ if (tmi->chars == -1) @@ -6440,7 +6444,7 @@ void HandleSetupScreen_Input(int mx, int my, int dx, int dy, int button) } } -void CustomizeKeyboard(int player_nr) +static boolean CustomizeKeyboardMain(int player_nr) { int i; int step_nr; @@ -6459,6 +6463,7 @@ void CustomizeKeyboard(int player_nr) { &custom_key.snap, "Snap Field" }, { &custom_key.drop, "Drop Element" } }; + int success = FALSE; /* read existing key bindings from player setup */ custom_key = setup.input[player_nr].key; @@ -6492,18 +6497,15 @@ void CustomizeKeyboard(int player_nr) { Key key = GetEventKey((KeyEvent *)&event, FALSE); - if (key == KSYM_Escape || (key == KSYM_Return && step_nr == 6)) + /* press 'Escape' to abort and keep the old key bindings */ + if (key == KSYM_Escape) { - if (key == KSYM_Escape) - FadeSkipNextFadeIn(); + FadeSkipNextFadeIn(); finished = TRUE; - break; - } - /* all keys configured -- wait for "Escape" or "Return" key */ - if (step_nr == 6) break; + } /* press 'Enter' to keep the existing key binding */ if (key == KSYM_Return) @@ -6530,11 +6532,12 @@ void CustomizeKeyboard(int player_nr) DrawText(mSX, mSY + (2 + 2 * (step_nr - 1) + 1) * 32, "Key:", FONT_MENU_1); - /* press 'Enter' to leave */ + /* all keys configured */ if (step_nr == 6) { - DrawText(mSX + 16, mSY + 15 * 32 + 16, - "Press Enter", FONT_TITLE_1); + finished = TRUE; + success = TRUE; + break; } @@ -6562,8 +6565,38 @@ void CustomizeKeyboard(int player_nr) BackToFront(); } - /* write new key bindings back to player setup */ - setup.input[player_nr].key = custom_key; + /* write new key bindings back to player setup, if successfully finished */ + if (success) + setup.input[player_nr].key = custom_key; + + return success; +} + +void CustomizeKeyboard(int player_nr) +{ + boolean success = CustomizeKeyboardMain(player_nr); + + if (success) + { + int font_nr = FONT_TITLE_1; + int font_height = getFontHeight(font_nr); + int ypos1 = SYSIZE / 2 - font_height * 2; + int ypos2 = SYSIZE / 2 - font_height * 1; + unsigned int wait_frame_delay = 0; + unsigned int wait_frame_delay_value = 2000; + + ResetDelayCounter(&wait_frame_delay); + + ClearField(); + + DrawTextSCentered(ypos1, font_nr, "Keyboard"); + DrawTextSCentered(ypos2, font_nr, "configured!"); + + while (!DelayReached(&wait_frame_delay, wait_frame_delay_value)) + BackToFront(); + + ClearEventQueue(); + } DrawSetupScreen_Input(); } @@ -6975,11 +7008,14 @@ void ConfigureJoystick(int player_nr) if (state != JOYSTICK_NOT_CONFIGURED) { boolean success = (state == JOYSTICK_CONFIGURED); - char *message = (success ? " IS CONFIGURED! " : " NOT AVAILABLE! "); + char message1[MAX_OUTPUT_LINESIZE + 1]; + char *message2 = (success ? "configured!" : "not available!"); char *device_name = setup.input[player_nr].joy.device_name; int nr = getJoystickNrFromDeviceName(device_name) + 1; - int xpos = mSX - SX; - int ypos = mSY - SY; + int font_nr = FONT_TITLE_1; + int font_height = getFontHeight(font_nr); + int ypos1 = SYSIZE / 2 - font_height * 2; + int ypos2 = SYSIZE / 2 - font_height * 1; unsigned int wait_frame_delay = 0; unsigned int wait_frame_delay_value = 2000; @@ -6987,8 +7023,10 @@ void ConfigureJoystick(int player_nr) ClearField(); - DrawTextF(xpos + 16, ypos + 6 * 32, FONT_TITLE_1, " JOYSTICK %d ", nr); - DrawTextF(xpos + 16, ypos + 7 * 32, FONT_TITLE_1, message); + sprintf(message1, "Joystick %d", nr); + + DrawTextSCentered(ypos1, font_nr, message1); + DrawTextSCentered(ypos2, font_nr, message2); while (!DelayReached(&wait_frame_delay, wait_frame_delay_value)) BackToFront();