added support for updating grid buttons after the screen was rotated
[rocksndiamonds.git] / src / screens.c
index 1444fe8be075de897b9e91c869047097f903bf2f..8b5c2bb474efcf9d70e24b507fc6ca684888e9ba 100644 (file)
@@ -7206,6 +7206,7 @@ boolean ConfigureVirtualButtonsMain()
   char grid_button_old[MAX_GRID_XSIZE][MAX_GRID_YSIZE];
   char grid_button_tmp[MAX_GRID_XSIZE][MAX_GRID_YSIZE];
   boolean set_grid_button = FALSE;
+  int nr = GRID_ACTIVE_NR();
   int x, y;
 
   for (x = 0; x < MAX_GRID_XSIZE; x++)
@@ -7350,6 +7351,31 @@ boolean ConfigureVirtualButtonsMain()
          }
          break;
 
+#if defined(TARGET_SDL2)
+       case SDL_WINDOWEVENT:
+         HandleWindowEvent((WindowEvent *) &event);
+
+         // check if device has been rotated
+         if (nr != GRID_ACTIVE_NR())
+         {
+           nr = GRID_ACTIVE_NR();
+
+           for (x = 0; x < MAX_GRID_XSIZE; x++)
+             for (y = 0; y < MAX_GRID_YSIZE; y++)
+               grid_button_old[x][y] = grid_button_tmp[x][y] =
+                 overlay.grid_button[x][y];
+         }
+
+         break;
+
+       case SDL_APP_WILLENTERBACKGROUND:
+       case SDL_APP_DIDENTERBACKGROUND:
+       case SDL_APP_WILLENTERFOREGROUND:
+       case SDL_APP_DIDENTERFOREGROUND:
+         HandlePauseResumeEvent((PauseResumeEvent *) &event);
+         break;
+#endif
+
         default:
          HandleOtherEvents(&event);
          break;
@@ -7369,6 +7395,10 @@ boolean ConfigureVirtualButtonsMain()
     BackToFront();
   }
 
+  for (x = 0; x < MAX_GRID_XSIZE; x++)
+    for (y = 0; y < MAX_GRID_YSIZE; y++)
+      overlay.grid_button_all[nr][x][y] = overlay.grid_button[x][y];
+
   overlay.grid_button_highlight = CHAR_GRID_BUTTON_NONE;
 
   SetOverlayShowGrid(FALSE);