added enabling/disabling virtual button overlay depending on input events
authorHolger Schemel <info@artsoft.org>
Sun, 16 Jul 2017 11:50:27 +0000 (13:50 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 16 Jul 2017 11:50:27 +0000 (13:50 +0200)
src/events.c
src/libgame/sdl.c
src/libgame/system.c
src/libgame/system.h

index 2472fdf5f8978b048af638730299206544445255..64fda8081da0fab274d5f3008bb35369d4a5f486 100644 (file)
@@ -250,7 +250,11 @@ void HandleOtherEvents(Event *event)
 #if defined(TARGET_SDL2)
     case SDL_CONTROLLERBUTTONDOWN:
     case SDL_CONTROLLERBUTTONUP:
+      // for any game controller button event, disable overlay buttons
+      SetOverlayEnabled(FALSE);
+
       HandleSpecialGameControllerButtons(event);
+
       /* FALL THROUGH */
     case SDL_CONTROLLERDEVICEADDED:
     case SDL_CONTROLLERDEVICEREMOVED:
@@ -668,6 +672,9 @@ void HandleFingerEvent(FingerEvent *event)
                             "KEY_PRESSED");
     int i;
 
+    // for any touch input event, enable overlay buttons (if activated)
+    SetOverlayEnabled(TRUE);
+
     Error(ERR_DEBUG, "::: key '%s' was '%s' [fingerId: %lld]",
          getKeyNameFromKey(key), key_status_name, event->fingerId);
 
@@ -1148,9 +1155,16 @@ void HandleKeyEvent(KeyEvent *event)
 #endif
 
 #if defined(PLATFORM_ANDROID)
-  // always map the "back" button to the "escape" key on Android devices
   if (key == KSYM_Back)
+  {
+    // always map the "back" button to the "escape" key on Android devices
     key = KSYM_Escape;
+  }
+  else
+  {
+    // for any key event other than "back" button, disable overlay buttons
+    SetOverlayEnabled(FALSE);
+  }
 #endif
 
   HandleKeyModState(keymod, key_status);
index 04fa05e8c5151be5721ad9c07bcce1e1f06173ca..8751f1b999dfa4de510e8eacf78aee61a9684e11 100644 (file)
@@ -2966,11 +2966,12 @@ static void DrawTouchInputOverlay()
   static int alpha_step = 5;
   static int alpha_last = 0;
   static int alpha = 0;
+  boolean active = (overlay.enabled && overlay.active);
 
-  if (!overlay.active && deactivated)
+  if (!active && deactivated)
     return;
 
-  if (overlay.active)
+  if (active)
   {
     if (alpha < alpha_max)
       alpha = MIN(alpha + alpha_step, alpha_max);
index 5ccf3fb3784650147bc1f70aed77af72925dd0bb..2b283c1a0c5d6813b7b533d30a1c10b1c66f21d6 100644 (file)
@@ -300,7 +300,18 @@ void InitGfxOtherSettings()
 
 void InitOverlayInfo()
 {
+  overlay.enabled = FALSE;
   overlay.active = FALSE;
+
+#if defined(PLATFORM_ANDROID)
+  if (strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS))
+    overlay.enabled = TRUE;
+#endif
+}
+
+void SetOverlayEnabled(boolean enabled)
+{
+  overlay.enabled = enabled;
 }
 
 void SetOverlayActive(boolean active)
index ca25b287ff43c9d07bc09d77ddd6370284628718..1b1dc2a453b5f64d73ba4b922ee4cb6d73ddecfb 100644 (file)
@@ -941,7 +941,8 @@ struct GfxInfo
 
 struct OverlayInfo
 {
-  boolean active;
+  boolean enabled;             /* overlay generally enabled or disabled */
+  boolean active;              /* overlay activated (depending on game mode) */
 };
 
 struct JoystickInfo
@@ -1469,6 +1470,7 @@ void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int));
 void InitGfxCustomArtworkInfo();
 void InitGfxOtherSettings();
 void InitOverlayInfo();
+void SetOverlayEnabled(boolean);
 void SetOverlayActive(boolean);
 boolean GetOverlayActive();
 void SetDrawDeactivationMask(int);