replaced 'file_identifier' tag by informal file header comment
[rocksndiamonds.git] / src / screens.c
index e453e4a732e05c4f154e8962cf6603f5051d6173..4ae7ac786e50266add635f325f26463f70dfaf15 100644 (file)
@@ -317,6 +317,9 @@ static struct
 } volumes_list[] =
 {
   {    0,      "0 %"                           },
+  {    1,      "1 %"                           },
+  {    2,      "2 %"                           },
+  {    5,      "5 %"                           },
   {    10,     "10 %"                          },
   {    20,     "20 %"                          },
   {    30,     "30 %"                          },
@@ -1377,7 +1380,7 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading)
   SetMainBackgroundImage(IMG_BACKGROUND_MAIN);
 
   if (fade_mask == REDRAW_ALL)
-    RedrawBackground();
+    RedrawGlobalBorder();
 
   ClearField();
 
@@ -1619,9 +1622,11 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
 
     if (game_status == GAME_MODE_INFO)
     {
+      int fade_mask = (num_title_screens == 0 ? REDRAW_FIELD : REDRAW_ALL);
+
       info_mode = INFO_MODE_MAIN;
 
-      DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu);
+      DrawInfoScreenExt(fade_mask, use_fading_main_menu);
     }
     else       /* default: return to main menu */
     {
@@ -1951,7 +1956,7 @@ static void DrawInfoScreen_Main(int fade_mask, boolean do_fading)
 
   if (fade_mask == REDRAW_ALL)
   {
-    RedrawBackground();
+    RedrawGlobalBorder();
 
     OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
   }
@@ -3296,8 +3301,8 @@ static void clearMenuListArea()
   int scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset;
 
   /* correct scrollbar position if placed outside menu (playfield) area */
-  if (scrollbar_xpos > mSX + SC_SCROLLBAR_XPOS)
-    scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS;
+  if (scrollbar_xpos > SX + SC_SCROLLBAR_XPOS)
+    scrollbar_xpos = SX + SC_SCROLLBAR_XPOS;
 
   /* clear menu list area, but not title or scrollbar */
   DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32,
@@ -4347,6 +4352,7 @@ static void execSetupSound()
 {
   if (volumes_simple == NULL)
   {
+    boolean current_volume_simple_found = FALSE;
     int i;
 
     for (i = 0; volumes_list[i].value != -1; i++)
@@ -4368,6 +4374,31 @@ static void execSetupSound()
       setString(&ti->infotext, "Sound Volume");
 
       pushTreeInfo(&volumes_simple, ti);
+
+      if (value == setup.volume_simple)
+        current_volume_simple_found = TRUE;
+    }
+
+    if (!current_volume_simple_found)
+    {
+      // add entry for non-preset volume value
+
+      TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+      char identifier[32], name[32];
+      int value = setup.volume_simple;
+
+      ti->node_top = &volumes_simple;
+      ti->sort_priority = value;
+
+      sprintf(identifier, "%d", value);
+      sprintf(name, "%d %% (Current)", value);
+
+      setString(&ti->identifier, identifier);
+      setString(&ti->name, name);
+      setString(&ti->name_sorting, name);
+      setString(&ti->infotext, "Sound Volume");
+
+      pushTreeInfo(&volumes_simple, ti);
     }
 
     /* sort volume values to start with lowest volume value */
@@ -4389,6 +4420,7 @@ static void execSetupSound()
 
   if (volumes_loops == NULL)
   {
+    boolean current_volume_loops_found = FALSE;
     int i;
 
     for (i = 0; volumes_list[i].value != -1; i++)
@@ -4410,6 +4442,31 @@ static void execSetupSound()
       setString(&ti->infotext, "Loops Volume");
 
       pushTreeInfo(&volumes_loops, ti);
+
+      if (value == setup.volume_loops)
+        current_volume_loops_found = TRUE;
+    }
+
+    if (!current_volume_loops_found)
+    {
+      // add entry for non-preset volume value
+
+      TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+      char identifier[32], name[32];
+      int value = setup.volume_loops;
+
+      ti->node_top = &volumes_loops;
+      ti->sort_priority = value;
+
+      sprintf(identifier, "%d", value);
+      sprintf(name, "%d %% (Current)", value);
+
+      setString(&ti->identifier, identifier);
+      setString(&ti->name, name);
+      setString(&ti->name_sorting, name);
+      setString(&ti->infotext, "Loops Volume");
+
+      pushTreeInfo(&volumes_loops, ti);
     }
 
     /* sort volume values to start with lowest volume value */
@@ -4431,6 +4488,7 @@ static void execSetupSound()
 
   if (volumes_music == NULL)
   {
+    boolean current_volume_music_found = FALSE;
     int i;
 
     for (i = 0; volumes_list[i].value != -1; i++)
@@ -4452,6 +4510,31 @@ static void execSetupSound()
       setString(&ti->infotext, "Music Volume");
 
       pushTreeInfo(&volumes_music, ti);
+
+      if (value == setup.volume_music)
+        current_volume_music_found = TRUE;
+    }
+
+    if (!current_volume_music_found)
+    {
+      // add entry for non-preset volume value
+
+      TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+      char identifier[32], name[32];
+      int value = setup.volume_music;
+
+      ti->node_top = &volumes_music;
+      ti->sort_priority = value;
+
+      sprintf(identifier, "%d", value);
+      sprintf(name, "%d %% (Current)", value);
+
+      setString(&ti->identifier, identifier);
+      setString(&ti->name, name);
+      setString(&ti->name_sorting, name);
+      setString(&ti->infotext, "Music Volume");
+
+      pushTreeInfo(&volumes_music, ti);
     }
 
     /* sort volume values to start with lowest volume value */