added flag to continue from hall of fame when pressing "return" key
[rocksndiamonds.git] / src / screens.c
index a94684fb78baa0867b1286868e7671d2fd003e8b..ed086dc30bd694862bf2cbdb891941aa6e80113a 100644 (file)
@@ -1531,6 +1531,15 @@ static int getChooseTreeEditYPos(int ypos_raw)
   return sy;
 }
 
+static int getChooseTreeEditXPosReal(int pos)
+{
+  int xpos = getChooseTreeEditXPos(pos);
+  int font_nr = getChooseTreeEditFont(FALSE);
+  int font_xoffset = getFontDrawOffsetX(font_nr);
+
+  return xpos + font_xoffset;
+}
+
 static void drawChooseTreeEdit(int ypos_raw, boolean active)
 {
   int sx = getChooseTreeEditXPos(POS_LEFT);
@@ -1712,6 +1721,9 @@ void DrawMainMenu(void)
     return;
   }
 
+  // reset flag to continue playing next level from hall of fame
+  scores.continue_playing = FALSE;
+
   // leveldir_current may be invalid (level group, parent link, node copy)
   leveldir_current = getValidLevelSeries(leveldir_current, leveldir_last_valid);
 
@@ -3998,7 +4010,7 @@ static int getPlayerNameColor(char *name)
 }
 
 static void drawTypeNameText(char *name, struct TextPosInfo *pos,
-                             boolean active)
+                            boolean active)
 {
   char text[MAX_PLAYER_NAME_LEN + 2] = { 0 };
   boolean multiple_users = (game_status == GAME_MODE_PSEUDO_TYPENAMES);
@@ -4006,8 +4018,12 @@ static void drawTypeNameText(char *name, struct TextPosInfo *pos,
   int sy = (multiple_users ? amSY + pos->y : mSY + ALIGNED_TEXT_YPOS(pos));
   int font_nr = (active ? FONT_ACTIVE(pos->font) : pos->font);
   int font_width = getFontWidth(font_nr);
+  int font_xoffset = getFontDrawOffsetX(font_nr);
+  int font_yoffset = getFontDrawOffsetY(font_nr);
+  int font_sx = sx + font_xoffset;
+  int font_sy = sy + font_yoffset;
 
-  DrawBackgroundForFont(sx, sy, pos->width, pos->height, font_nr);
+  DrawBackgroundForFont(font_sx, font_sy, pos->width, pos->height, font_nr);
 
   sprintf(text, "%s%c", name, (active ? '_' : '\0'));
 
@@ -4638,8 +4654,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
   boolean has_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->mapped;
   int mx_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x;
   int mx_right_border = (has_scrollbar ? mx_scrollbar : SX + SXSIZE);
-  int sx1_edit_name = getChooseTreeEditXPos(POS_LEFT);
-  int sx2_edit_name = getChooseTreeEditXPos(POS_RIGHT);
+  int sx1_edit_name = getChooseTreeEditXPosReal(POS_LEFT);
+  int sx2_edit_name = getChooseTreeEditXPosReal(POS_RIGHT);
   int x = 0;
   int y = (ti != NULL ? ti->cl_cursor : 0);
   int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
@@ -4783,17 +4799,17 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
 
 #if defined(PLATFORM_ANDROID)
   // touching the screen anywhere continues playing the next level
-  if ((mx || my) && scores.was_just_playing)
+  if ((mx || my) && scores.continue_playing)
   {
     mx = my = 0;
     button = MB_MENU_CHOICE;
   }
 #endif
 
-  // any mouse click or direction input stops playing the next level
-  if ((mx || my || dx || dy) && scores.was_just_playing)
+  // any mouse click or cursor key stops leaving scores by "Return" key
+  if ((mx || my || dx || dy) && scores.continue_on_return)
   {
-    scores.was_just_playing = FALSE;
+    scores.continue_on_return = FALSE;
     level_nr = scores.last_level_nr;
     LoadLevel(level_nr);
   }
@@ -5076,16 +5092,13 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
          }
          else if (game_status == GAME_MODE_SCORES)
          {
-           if (setup.auto_play_next_level && setup.increment_levels &&
-               scores.last_level_nr < leveldir_current->last_level &&
-               scores.was_just_playing &&
-               !network_playing)
+           if (scores.continue_playing && scores.continue_on_return)
            {
              StartGameActions(network.enabled, setup.autorecord,
                               level.random_seed);
              return;
            }
-           else if (!scores.was_just_playing)
+           else if (!scores.continue_on_return)
            {
              SetGameStatus(GAME_MODE_SCOREINFO);
 
@@ -5149,6 +5162,9 @@ void DrawChoosePlayerName(void)
   if (player_name_current == NULL)
     player_name_current = player_name;
 
+  // set text size for main name input (also used on name selection screen)
+  InitializeMainControls();
+
   DrawChooseTree(&player_name_current);
 }
 
@@ -5282,10 +5298,10 @@ static void DrawHallOfFame_setScoreEntries(void)
   // ("score_entries" and "score_entry_current" may be NULL here)
 }
 
-void DrawHallOfFame(int level_nr)
+void DrawHallOfFame(int nr)
 {
-  scores.last_level_nr = level_nr;
-  scores.was_just_playing = (game_status_last_screen == GAME_MODE_PLAYING);
+  scores.last_level_nr = nr;
+  scores.continue_on_return = (game_status_last_screen == GAME_MODE_PLAYING);
 
   // (this is needed when called from GameEnd() after winning a game)
   KeyboardAutoRepeatOn();
@@ -5294,7 +5310,7 @@ void DrawHallOfFame(int level_nr)
   SetDrawDeactivationMask(REDRAW_NONE);
   SetDrawBackgroundMask(REDRAW_FIELD);
 
-  LoadLocalAndServerScore(level_nr, TRUE);
+  LoadLocalAndServerScore(scores.last_level_nr, TRUE);
 
   DrawHallOfFame_setScoreEntries();