fixed name of element 'polarisator' to 'polarizer'
[rocksndiamonds.git] / src / screens.c
index 5011bee25f07c1476a011ab0c65a6ba51308af54..e20f4deb67a8fe729b207733fdf6dfc5d83ad83b 100644 (file)
 
 #define MAX_MENU_MODES                 MAX(MAX_INFO_MODES, MAX_SETUP_MODES)
 
+/* setup screen titles */
+#define STR_SETUP_MAIN                 "Setup"
+#define STR_SETUP_GAME                 "Game & Menu"
+#define STR_SETUP_EDITOR               "Editor"
+#define STR_SETUP_GRAPHICS             "Graphics"
+#define STR_SETUP_SOUND                        "Sound & Music"
+#define STR_SETUP_ARTWORK              "Custom Artwork"
+#define STR_SETUP_INPUT                        "Input Devices"
+#define STR_SETUP_TOUCH                        "Touch Controls"
+#define STR_SETUP_SHORTCUTS            "Key Shortcuts"
+#define STR_SETUP_EXIT                 "Exit"
+#define STR_SETUP_SAVE_AND_EXIT                "Save and Exit"
+
+#define STR_SETUP_CHOOSE_GAME_SPEED    "Game Speed"
+#define STR_SETUP_CHOOSE_SCROLL_DELAY  "Scroll Delay"
+#define STR_SETUP_CHOOSE_SNAPSHOT_MODE "Snapshot Mode"
+#define STR_SETUP_CHOOSE_WINDOW_SIZE   "Window Scaling"
+#define STR_SETUP_CHOOSE_SCALING_TYPE  "Anti-Aliasing"
+#define STR_SETUP_CHOOSE_RENDERING     "Rendering Mode"
+#define STR_SETUP_CHOOSE_VOLUME_SIMPLE "Sound Volume"
+#define STR_SETUP_CHOOSE_VOLUME_LOOPS  "Loops Volume"
+#define STR_SETUP_CHOOSE_VOLUME_MUSIC  "Music Volume"
+#define STR_SETUP_CHOOSE_TOUCH_CONTROL "Control Type"
+#define STR_SETUP_CHOOSE_MOVE_DISTANCE "Move Distance"
+#define STR_SETUP_CHOOSE_DROP_DISTANCE "Drop Distance"
+
 /* for input setup functions */
 #define SETUPINPUT_SCREEN_POS_START    0
 #define SETUPINPUT_SCREEN_POS_END      (SCR_FIELDY - 4)
 #define SETUPINPUT_SCREEN_POS_EMPTY2   (SETUPINPUT_SCREEN_POS_END - 1)
 
 #define MENU_SETUP_FONT_TITLE          FONT_TEXT_1
-#define MENU_SETUP_FONT_TEXT           FONT_REQUEST
+#define MENU_SETUP_FONT_TEXT           FONT_TITLE_2
 
 /* for various menu stuff  */
 #define MENU_SCREEN_START_XPOS         1
@@ -277,7 +303,7 @@ static struct
   char *text;
 } scaling_types_list[] =
 {
-  {    SCALING_QUALITY_NEAREST, "None"         },
+  {    SCALING_QUALITY_NEAREST, "Off"          },
   {    SCALING_QUALITY_LINEAR,  "Linear"       },
   {    SCALING_QUALITY_BEST,    "Anisotropic"  },
 
@@ -395,6 +421,7 @@ static struct
   char *text;
 } touch_controls_list[] =
 {
+  {    TOUCH_CONTROL_OFF,              "Off"                   },
   {    TOUCH_CONTROL_VIRTUAL_BUTTONS,  "Virtual Buttons"       },
   {    TOUCH_CONTROL_WIPE_GESTURES,    "Wipe Gestures"         },
   {    TOUCH_CONTROL_FOLLOW_FINGER,    "Follow Finger"         },
@@ -444,6 +471,9 @@ static struct
 #define DRAW_YOFFSET_INFO(i)   (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ?  \
                                 menu.draw_yoffset[GAME_MODE_INFO] :    \
                                 menu.draw_yoffset_info[DRAW_MODE_INFO(i)])
+#define EXTRA_SPACING_INFO(i)  (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ? \
+                                menu.extra_spacing[GAME_MODE_INFO] :   \
+                                menu.extra_spacing_info[DRAW_MODE_INFO(i)])
 
 #define DRAW_XOFFSET_SETUP(i)  (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \
                                 menu.draw_xoffset[GAME_MODE_SETUP] :   \
@@ -451,6 +481,9 @@ static struct
 #define DRAW_YOFFSET_SETUP(i)  (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \
                                 menu.draw_yoffset[GAME_MODE_SETUP] :   \
                                 menu.draw_yoffset_setup[DRAW_MODE_SETUP(i)])
+#define EXTRA_SPACING_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \
+                                menu.extra_spacing[GAME_MODE_SETUP] :  \
+                                menu.extra_spacing_setup[DRAW_MODE_SETUP(i)])
 
 #define DRAW_XOFFSET(s)                ((s) == GAME_MODE_INFO ?                \
                                 DRAW_XOFFSET_INFO(info_mode) :         \
@@ -462,6 +495,11 @@ static struct
                                 (s) == GAME_MODE_SETUP ?               \
                                 DRAW_YOFFSET_SETUP(setup_mode) :       \
                                 menu.draw_yoffset[DRAW_MODE(s)])
+#define EXTRA_SPACING(s)       ((s) == GAME_MODE_INFO ?                \
+                                EXTRA_SPACING_INFO(info_mode) :        \
+                                (s) == GAME_MODE_SETUP ?               \
+                                EXTRA_SPACING_SETUP(setup_mode) :      \
+                                menu.extra_spacing[DRAW_MODE(s)])
 
 #define mSX                    (SX + DRAW_XOFFSET(game_status))
 #define mSY                    (SY + DRAW_YOFFSET(game_status))
@@ -544,6 +582,9 @@ static char *main_text_level_year           = NULL;
 static char *main_text_level_imported_from     = NULL;
 static char *main_text_level_imported_by       = NULL;
 static char *main_text_level_tested_by         = NULL;
+static char *main_text_title_1                 = NULL;
+static char *main_text_title_2                 = NULL;
+static char *main_text_title_3                 = NULL;
 
 struct MainControlInfo
 {
@@ -693,19 +734,19 @@ static struct MainControlInfo main_controls[] =
   {
     MAIN_CONTROL_TITLE_1,
     NULL,                              -1,
-    &menu.main.text.title_1,           &setup.internal.program_title,
+    &menu.main.text.title_1,           &main_text_title_1,
     NULL,                              NULL,
   },
   {
     MAIN_CONTROL_TITLE_2,
     NULL,                              -1,
-    &menu.main.text.title_2,           &setup.internal.program_copyright,
+    &menu.main.text.title_2,           &main_text_title_2,
     NULL,                              NULL,
   },
   {
     MAIN_CONTROL_TITLE_3,
     NULL,                              -1,
-    &menu.main.text.title_3,           &setup.internal.program_company,
+    &menu.main.text.title_3,           &main_text_title_3,
     NULL,                              NULL,
   },
 
@@ -977,6 +1018,10 @@ static void InitializeMainControls()
   main_text_level_imported_by  = leveldir_current->imported_by;
   main_text_level_tested_by    = leveldir_current->tested_by;
 
+  main_text_title_1 = getConfigProgramTitleString();
+  main_text_title_2 = getConfigProgramCopyrightString();
+  main_text_title_3 = getConfigProgramCompanyString();
+
   /* set main control screen positions to dynamically determined values */
   for (i = 0; main_controls[i].nr != -1; i++)
   {
@@ -1285,9 +1330,8 @@ static void drawChooseTreeCursor(int ypos, boolean active)
 
 void DrawHeadline()
 {
-  DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, getProgramTitleString());
-  DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2,
-                   setup.internal.program_copyright);
+  DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, main_text_title_1);
+  DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, main_text_title_2);
 }
 
 void DrawTitleScreenImage(int nr, boolean initial)
@@ -1475,7 +1519,7 @@ void DrawMainMenu()
   if (redraw_mask & REDRAW_ALL)
     fade_mask = REDRAW_ALL;
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   FadeOut(fade_mask);
@@ -2175,7 +2219,7 @@ static void DrawInfoScreen_Main()
   if (redraw_mask & REDRAW_ALL)
     fade_mask = REDRAW_ALL;
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -2532,7 +2576,7 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
 
 static int getMenuFontSpacing(int spacing_height, int font_nr)
 {
-  int font_spacing = getFontHeight(font_nr) + menu.extra_spacing;
+  int font_spacing = getFontHeight(font_nr) + EXTRA_SPACING(game_status);
 
   return (spacing_height < 0 ? ABS(spacing_height) * font_spacing :
          spacing_height);
@@ -2540,7 +2584,8 @@ static int getMenuFontSpacing(int spacing_height, int font_nr)
 
 static int getMenuTextSpacing(int spacing_height, int font_nr)
 {
-  return getMenuFontSpacing(spacing_height, font_nr) + menu.extra_spacing;
+  return (getMenuFontSpacing(spacing_height, font_nr) +
+         EXTRA_SPACING(game_status));
 }
 
 static int getMenuTextStep(int spacing_height, int font_nr)
@@ -3826,7 +3871,7 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
 {
   int fade_mask = REDRAW_FIELD;
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY))
@@ -4345,7 +4390,7 @@ void DrawHallOfFame(int highlight_position)
 {
   int fade_mask = REDRAW_FIELD;
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -4541,7 +4586,7 @@ static void execSetupGame_setGameSpeeds()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Game Speed");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_GAME_SPEED);
 
       pushTreeInfo(&game_speeds, ti);
     }
@@ -4591,7 +4636,7 @@ static void execSetupGame_setScrollDelays()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Scroll Delay");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_SCROLL_DELAY);
 
       pushTreeInfo(&scroll_delays, ti);
     }
@@ -4641,7 +4686,7 @@ static void execSetupGame_setSnapshotModes()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Snapshot Mode");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_SNAPSHOT_MODE);
 
       pushTreeInfo(&snapshot_modes, ti);
     }
@@ -4738,7 +4783,7 @@ static void execSetupGraphics_setWindowSizes(boolean update_list)
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Window Scaling");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_WINDOW_SIZE);
 
       pushTreeInfo(&window_sizes, ti);
 
@@ -4763,7 +4808,7 @@ static void execSetupGraphics_setWindowSizes(boolean update_list)
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Window Scaling");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_WINDOW_SIZE);
 
       pushTreeInfo(&window_sizes, ti);
     }
@@ -4815,7 +4860,7 @@ static void execSetupGraphics_setScalingTypes()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Anti-Aliasing");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_SCALING_TYPE);
 
       pushTreeInfo(&scaling_types, ti);
     }
@@ -4865,7 +4910,7 @@ static void execSetupGraphics_setRenderingModes()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Special Rendering");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_RENDERING);
 
       pushTreeInfo(&rendering_modes, ti);
     }
@@ -4992,7 +5037,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Sound Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_SIMPLE);
 
       pushTreeInfo(&volumes_simple, ti);
 
@@ -5017,7 +5062,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Sound Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_SIMPLE);
 
       pushTreeInfo(&volumes_simple, ti);
     }
@@ -5060,7 +5105,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Loops Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_LOOPS);
 
       pushTreeInfo(&volumes_loops, ti);
 
@@ -5085,7 +5130,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Loops Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_LOOPS);
 
       pushTreeInfo(&volumes_loops, ti);
     }
@@ -5128,7 +5173,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Music Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_MUSIC);
 
       pushTreeInfo(&volumes_music, ti);
 
@@ -5153,7 +5198,7 @@ static void execSetupSound()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Music Volume");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_MUSIC);
 
       pushTreeInfo(&volumes_music, ti);
     }
@@ -5232,7 +5277,7 @@ static void execSetupTouch()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Control Type");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_TOUCH_CONTROL);
 
       pushTreeInfo(&touch_controls, ti);
     }
@@ -5274,7 +5319,7 @@ static void execSetupTouch()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Move Distance");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_MOVE_DISTANCE);
 
       pushTreeInfo(&move_distances, ti);
     }
@@ -5317,7 +5362,7 @@ static void execSetupTouch()
       setString(&ti->identifier, identifier);
       setString(&ti->name, name);
       setString(&ti->name_sorting, name);
-      setString(&ti->infotext, "Drop Distance");
+      setString(&ti->infotext, STR_SETUP_CHOOSE_DROP_DISTANCE);
 
       pushTreeInfo(&drop_distances, ti);
     }
@@ -5465,17 +5510,17 @@ static void execSaveAndExitSetup()
 
 static struct TokenInfo setup_info_main[] =
 {
-  { TYPE_ENTER_MENU,   execSetupGame,          "Game & Menu"           },
-  { TYPE_ENTER_MENU,   execSetupEditor,        "Editor"                },
-  { TYPE_ENTER_MENU,   execSetupGraphics,      "Graphics"              },
-  { TYPE_ENTER_MENU,   execSetupSound,         "Sound & Music"         },
-  { TYPE_ENTER_MENU,   execSetupArtwork,       "Custom Artwork"        },
-  { TYPE_ENTER_MENU,   execSetupInput,         "Input Devices"         },
-  { TYPE_ENTER_MENU,   execSetupTouch,         "Touch Controls"        },
-  { TYPE_ENTER_MENU,   execSetupShortcuts,     "Key Shortcuts"         },
+  { TYPE_ENTER_MENU,   execSetupGame,          STR_SETUP_GAME          },
+  { TYPE_ENTER_MENU,   execSetupEditor,        STR_SETUP_EDITOR        },
+  { TYPE_ENTER_MENU,   execSetupGraphics,      STR_SETUP_GRAPHICS      },
+  { TYPE_ENTER_MENU,   execSetupSound,         STR_SETUP_SOUND         },
+  { TYPE_ENTER_MENU,   execSetupArtwork,       STR_SETUP_ARTWORK       },
+  { TYPE_ENTER_MENU,   execSetupInput,         STR_SETUP_INPUT         },
+  { TYPE_ENTER_MENU,   execSetupTouch,         STR_SETUP_TOUCH         },
+  { TYPE_ENTER_MENU,   execSetupShortcuts,     STR_SETUP_SHORTCUTS     },
   { TYPE_EMPTY,                NULL,                   ""                      },
-  { TYPE_LEAVE_MENU,   execExitSetup,          "Exit"                  },
-  { TYPE_LEAVE_MENU,   execSaveAndExitSetup,   "Save and Exit"         },
+  { TYPE_LEAVE_MENU,   execExitSetup,          STR_SETUP_EXIT          },
+  { TYPE_LEAVE_MENU,   execSaveAndExitSetup,   STR_SETUP_SAVE_AND_EXIT },
 
   { 0,                 NULL,                   NULL                    }
 };
@@ -5998,7 +6043,7 @@ static void DrawSetupScreen_Generic()
   char *title_string = NULL;
   int i;
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -6024,37 +6069,37 @@ static void DrawSetupScreen_Generic()
   if (setup_mode == SETUP_MODE_MAIN)
   {
     setup_info = setup_info_main;
-    title_string = "Setup";
+    title_string = STR_SETUP_MAIN;
   }
   else if (setup_mode == SETUP_MODE_GAME)
   {
     setup_info = setup_info_game;
-    title_string = "Setup Game";
+    title_string = STR_SETUP_GAME;
   }
   else if (setup_mode == SETUP_MODE_EDITOR)
   {
     setup_info = setup_info_editor;
-    title_string = "Setup Editor";
+    title_string = STR_SETUP_EDITOR;
   }
   else if (setup_mode == SETUP_MODE_GRAPHICS)
   {
     setup_info = setup_info_graphics;
-    title_string = "Setup Graphics";
+    title_string = STR_SETUP_GRAPHICS;
   }
   else if (setup_mode == SETUP_MODE_SOUND)
   {
     setup_info = setup_info_sound;
-    title_string = "Setup Sound";
+    title_string = STR_SETUP_SOUND;
   }
   else if (setup_mode == SETUP_MODE_ARTWORK)
   {
     setup_info = setup_info_artwork;
-    title_string = "Custom Artwork";
+    title_string = STR_SETUP_ARTWORK;
   }
   else if (setup_mode == SETUP_MODE_TOUCH)
   {
     setup_info = setup_info_touch;
-    title_string = "Setup Touch Ctrls";
+    title_string = STR_SETUP_TOUCH;
 
     if (strEqual(setup.touch.control_type, TOUCH_CONTROL_WIPE_GESTURES))
       setup_info = setup_info_touch_wipe_gestures;
@@ -6062,32 +6107,32 @@ static void DrawSetupScreen_Generic()
   else if (setup_mode == SETUP_MODE_SHORTCUTS)
   {
     setup_info = setup_info_shortcuts;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_1)
   {
     setup_info = setup_info_shortcuts_1;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_2)
   {
     setup_info = setup_info_shortcuts_2;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_3)
   {
     setup_info = setup_info_shortcuts_3;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_4)
   {
     setup_info = setup_info_shortcuts_4;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_5)
   {
     setup_info = setup_info_shortcuts_5;
-    title_string = "Setup Shortcuts";
+    title_string = STR_SETUP_SHORTCUTS;
   }
 
   /* use modified setup info without setup entries marked as hidden */
@@ -6135,7 +6180,7 @@ void DrawSetupScreen_Input()
 
   setup_info = setup_info_input;
 
-  DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Setup Input");
+  DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, STR_SETUP_INPUT);
 
   for (i = 0; setup_info[i].type != 0 && i < MAX_MENU_ENTRIES_ON_SCREEN; i++)
   {
@@ -7046,6 +7091,9 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
 
 void HandleGameActions()
 {
+  if (game.restart_game_message != NULL)
+    RequestRestartGame(game.restart_game_message);
+
   if (game_status != GAME_MODE_PLAYING)
     return;