summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5191247)
Before, when handling finger events, a flag was set to indicate if
any virtual button was pressed to prevent handling gadgets at the
same screen position. This check was broken, because button events
(including gadget checks) may be processed before the corresponding
finger events are handled, in which case this flag will be set too
late.
Now, checking if virtual buttons are pressed is done directly before
attempting to handle gadgets at the same screen position, so it does
not make a difference if button events or finger events are handled
first.
static unsigned int special_cursor_delay = 0;
static unsigned int special_cursor_delay_value = 1000;
static unsigned int special_cursor_delay = 0;
static unsigned int special_cursor_delay_value = 1000;
-static boolean virtual_button_pressed = FALSE;
static boolean stop_processing_events = FALSE;
static boolean stop_processing_events = FALSE;
+#if defined(PLATFORM_ANDROID)
+static boolean CheckVirtualButtonPressed(int mx, int my, int button)
+{
+ float touch_x = (float)(mx + video.screen_xoffset) / video.screen_width;
+ float touch_y = (float)(my + video.screen_yoffset) / video.screen_height;
+ int x = touch_x * overlay.grid_xsize;
+ int y = touch_y * overlay.grid_ysize;
+ int grid_button = overlay.grid_button[x][y];
+ Key key = GetKeyFromGridButton(grid_button);
+ int key_status = (button == MB_RELEASED ? KEY_RELEASED : KEY_PRESSED);
+
+ return (key_status == KEY_PRESSED && key != KSYM_UNDEFINED);
+}
+#endif
+
void HandleButtonEvent(ButtonEvent *event)
{
#if DEBUG_EVENTS_BUTTON
void HandleButtonEvent(ButtonEvent *event)
{
#if DEBUG_EVENTS_BUTTON
- virtual_button_pressed = (key_status == KEY_PRESSED && key != KSYM_UNDEFINED);
-
// for any touch input event, enable overlay buttons (if activated)
SetOverlayEnabled(TRUE);
// for any touch input event, enable overlay buttons (if activated)
SetOverlayEnabled(TRUE);
level.game_engine_type == GAME_ENGINE_TYPE_MM ||
strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER) ||
(strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS) &&
level.game_engine_type == GAME_ENGINE_TYPE_MM ||
strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER) ||
(strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS) &&
- !virtual_button_pressed));
+ !CheckVirtualButtonPressed(mx, my, button)));
#endif
if (HandleGlobalAnimClicks(mx, my, button, FALSE))
#endif
if (HandleGlobalAnimClicks(mx, my, button, FALSE))