fixed bug with using too large scroll delay value on smaller playfields
[rocksndiamonds.git] / src / events.c
index 31d45abff4cc3946e05589270ad869d05765e3d4..0fa609aa4b8146850fe1bb10c1fba0e3ca6156fd 100644 (file)
@@ -405,7 +405,10 @@ void ClearPlayerAction(void)
   // simulate key release events for still pressed keys
   key_joystick_mapping = 0;
   for (i = 0; i < MAX_PLAYERS; i++)
+  {
     stored_player[i].action = 0;
+    stored_player[i].snap_action = 0;
+  }
 
   ClearJoystickState();
   ClearPlayerMouseAction();
@@ -683,6 +686,7 @@ static struct
   SDL_FingerID finger_id;
   int counter;
   Key key;
+  byte action;
 } touch_info[NUM_TOUCH_FINGERS];
 
 static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
@@ -811,6 +815,9 @@ static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
        {
          HandleKey(touch_info[i].key, KEY_RELEASED);
 
+         // undraw previous grid button when moving finger away
+         overlay.grid_button_action &= ~touch_info[i].action;
+
          Error(ERR_DEBUG, "=> key == '%s', key_status == '%s' [slot %d] [2]",
                getKeyNameFromKey(touch_info[i].key), "KEY_RELEASED", i);
        }
@@ -828,6 +835,7 @@ static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
       touch_info[i].finger_id = event->fingerId;
       touch_info[i].counter = Counter();
       touch_info[i].key = key;
+      touch_info[i].action = grid_button_action;
     }
     else
     {
@@ -843,6 +851,7 @@ static void HandleFingerEvent_VirtualButtons(FingerEvent *event)
       touch_info[i].finger_id = 0;
       touch_info[i].counter = 0;
       touch_info[i].key = 0;
+      touch_info[i].action = JOY_NO_ACTION;
     }
   }
 }