added auto-playing next level when touching scores screen on Android
[rocksndiamonds.git] / src / screens.c
index 2f2352cde7798033142a951dc9c2568d96352d8b..f578c05d233f24ac8454379b86bb18b66e79103f 100644 (file)
@@ -4781,10 +4781,25 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
     return;
   }
 
-  if (mx || my)                // mouse input
+#if defined(PLATFORM_ANDROID)
+  // touching the screen anywhere continues playing the next level
+  if ((mx || my) && scores.was_just_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)
   {
     scores.was_just_playing = FALSE;
+    level_nr = scores.last_level_nr;
+    LoadLevel(level_nr);
+  }
 
+  if (mx || my)                // mouse input
+  {
     x = (mx - amSX) / 32;
     y = (my - amSY) / 32 - MENU_SCREEN_START_YPOS;
 
@@ -4793,8 +4808,6 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
   }
   else if (dx || dy)   // keyboard or scrollbar/scrollbutton input
   {
-    scores.was_just_playing = FALSE;
-
     // move cursor instead of scrolling when already at start/end of list
     if (dy == -1 * SCROLL_LINE && ti->cl_first == 0)
       dy = -1;
@@ -5416,10 +5429,11 @@ static void DrawScoreInfo_Content(int entry_nr)
   int ystep_title = getMenuTextStep(spacing_title, font_title);
   int ystep_para  = getMenuTextStep(spacing_para,  font_text);
   int ystep_line  = getMenuTextStep(spacing_line,  font_text);
+  int xstart  = mSX - SX + menu.left_spacing[GAME_MODE_SCOREINFO];
   int ystart  = mSY - SY + menu.top_spacing[GAME_MODE_SCOREINFO];
   int ybottom = mSY - SY + SYSIZE - menu.bottom_spacing[GAME_MODE_SCOREINFO];
-  int xstart1 = mSX - SX + 2 * xstep;
-  int xstart2 = mSX - SX + 13 * xstep;
+  int xstart1 = xstart + xstep;
+  int xstart2 = xstart + xstep * 12;
   int select_x = SX + xstart1;
   int select_y1, select_y2;
   int play_x, play_y;
@@ -5429,14 +5443,14 @@ static void DrawScoreInfo_Content(int entry_nr)
   int font_height = getFontHeight(font_text);
   int tape_date_width  = getTextWidth(tape_date, font_text);
   int pad_left = xstart2;
-  int pad_right = MENU_SCREEN_INFO_SPACE_RIGHT;
+  int pad_right = menu.right_spacing[GAME_MODE_SCOREINFO];
   int max_chars_per_line = (SXSIZE - pad_left - pad_right) / font_width;
   int max_lines_per_text = 5;
   int lines;
 
   ClearField();
 
-  // redraw score selection buttons (which have just been erased)
+  // redraw level selection buttons (which have just been erased)
   RedrawScreenMenuGadgets(SCREEN_MASK_SCORES);
 
   if (score_entries == NULL)
@@ -5533,6 +5547,9 @@ static void DrawScoreInfo(int entry_nr)
 
   UnmapAllGadgets();
 
+  FreeScreenGadgets();
+  CreateScreenGadgets();
+
   FadeOut(REDRAW_FIELD);
 
   // needed if different viewport properties defined after playing score tape
@@ -9736,12 +9753,14 @@ static void CreateScreenMenubuttons(void)
       if (strPrefix(leveldir_current->identifier, "snake_bite"))
        title_width = strlen(INFOTEXT_SCORE_ENTRY) * 32;
 
+      // use "SX" here to center buttons (ignore horizontal draw offset)
       if (pos->x == -1)
        x = (id == SCREEN_CTRL_ID_PREV_LEVEL2 ?
             SX + (SXSIZE - title_width) / 2 - width * 3 / 2 :
             id == SCREEN_CTRL_ID_NEXT_LEVEL2 ?
             SX + (SXSIZE + title_width) / 2 + width / 2 : 0);
 
+      // use "mSY" here to place buttons (respect vertical draw offset)
       if (pos->y == -1)
        y = (id == SCREEN_CTRL_ID_PREV_LEVEL2 ||
             id == SCREEN_CTRL_ID_NEXT_LEVEL2 ? mSY + MENU_TITLE1_YPOS : 0);
@@ -10250,6 +10269,12 @@ static void HandleScreenGadgets(struct GadgetInfo *gi)
   }
 }
 
+void HandleScreenGadgetKeys(Key key)
+{
+  if (key == setup.shortcut.tape_play)
+    HandleScreenGadgets(screen_gadget[SCREEN_CTRL_ID_PLAY_TAPE]);
+}
+
 void DumpScreenIdentifiers(void)
 {
   int i;