moved setting overlay grid size and buttons to separate function
[rocksndiamonds.git] / src / events.c
index 41b60832fa50f92d165da235a709403b24d034d4..e3632df02a71a2c3081f1fb634d0b128d6c7e1dc 100644 (file)
@@ -43,6 +43,7 @@ static boolean stop_processing_events = FALSE;
 
 
 // forward declarations for internal use
+static void ClearTouchInfo(void);
 static void HandleNoEvent(void);
 static void HandleEventActions(void);
 
@@ -407,6 +408,7 @@ void ClearEventQueue(void)
        button_status = MB_RELEASED;
        break;
 
+      case EVENT_FINGERRELEASE:
       case EVENT_KEYRELEASE:
        ClearPlayerAction();
        break;
@@ -442,6 +444,10 @@ void ClearPlayerAction(void)
     stored_player[i].snap_action = 0;
   }
 
+  // simulate finger release events for still pressed virtual buttons
+  overlay.grid_button_action = JOY_NO_ACTION;
+
+  ClearTouchInfo();
   ClearJoystickState();
   ClearPlayerMouseAction();
 }
@@ -667,19 +673,10 @@ void HandleWindowEvent(WindowEvent *event)
        // check if screen orientation has changed (should always be true here)
        if (nr != GRID_ACTIVE_NR())
        {
-         int x, y;
-
          if (game_status == GAME_MODE_SETUP)
            RedrawSetupScreenAfterScreenRotation(nr);
 
-         nr = GRID_ACTIVE_NR();
-
-         overlay.grid_xsize = setup.touch.grid_xsize[nr];
-         overlay.grid_ysize = setup.touch.grid_ysize[nr];
-
-         for (x = 0; x < MAX_GRID_XSIZE; x++)
-           for (y = 0; y < MAX_GRID_YSIZE; y++)
-             overlay.grid_button[x][y] = setup.touch.grid_button[nr][x][y];
+         SetOverlayGridSizeAndButtons();
        }
       }
     }
@@ -708,6 +705,14 @@ static void SetTouchInfo(int pos, SDL_FingerID finger_id, int counter,
   touch_info[pos].action = action;
 }
 
+static void ClearTouchInfo(void)
+{
+  int i;
+
+  for (i = 0; i < NUM_TOUCH_FINGERS; i++)
+    SetTouchInfo(i, 0, 0, 0, JOY_NO_ACTION);
+}
+
 static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
 {
   int x = event->x * overlay.grid_xsize;