X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=21836c9dd6c67355bff8ec57d09084569c719640;hb=77c74cbf7569a65f71e004fab915a8b6ee73cbed;hp=073e0db8c220116aa33eb1c88f880f4c0d20b980;hpb=519124736d97d1e9042eb4713dc23e1a543e3dd4;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 073e0db8..21836c9d 100644 --- a/src/events.c +++ b/src/events.c @@ -39,7 +39,6 @@ static int cursor_mode_last = CURSOR_DEFAULT; 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; @@ -477,6 +476,21 @@ static Key GetKeyFromGridButton(int grid_button) KSYM_UNDEFINED); } +#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 @@ -639,6 +653,7 @@ void HandleWindowEvent(WindowEvent *event) video.display_height = new_display_height; SDLSetScreenProperties(); + SetGadgetsPosition_OverlayTouchButtons(); // check if screen orientation has changed (should always be true here) if (nr != GRID_ACTIVE_NR()) @@ -687,8 +702,6 @@ static void HandleFingerEvent_VirtualButtons(FingerEvent *event) "KEY_PRESSED"); int i; - virtual_button_pressed = (key_status == KEY_PRESSED && key != KSYM_UNDEFINED); - // for any touch input event, enable overlay buttons (if activated) SetOverlayEnabled(TRUE); @@ -1436,6 +1449,9 @@ void HandleKeyEvent(KeyEvent *event) { // for any other "real" key event, disable virtual buttons SetOverlayEnabled(FALSE); + + // for any other "real" key event, disable overlay touch buttons + runtime.uses_touch_device = FALSE; } #endif @@ -1667,7 +1683,15 @@ void HandleButton(int mx, int my, int button, int button_nr) 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))); + + // always recognize potentially releasing already pressed gadgets + if (button == MB_RELEASED) + handle_gadgets = TRUE; + + // always recognize pressing or releasing overlay touch buttons + if (CheckPosition_OverlayTouchButtons(mx, my, button) && !motion_status) + handle_gadgets = TRUE; #endif if (HandleGlobalAnimClicks(mx, my, button, FALSE))