improved shifting up video display when activating screen keyboard (Android)
[rocksndiamonds.git] / src / events.c
index c743a8b09e5a17b3c7b5e5f36ba04cc695b7cf8e..5bcdd5fb22c723e4aaba848b844e2b4d937f1b03 100644 (file)
@@ -412,6 +412,11 @@ void HandleButtonEvent(ButtonEvent *event)
        event->x, event->y);
 #endif
 
+#if defined(HAS_SCREEN_KEYBOARD)
+  if (video.shifted_up)
+    event->y += video.shifted_up_pos;
+#endif
+
   motion_status = FALSE;
 
   if (event->type == EVENT_BUTTONPRESS)
@@ -867,21 +872,16 @@ void HandleTextEvent(TextEvent *event)
        GetKeyModState());
 #endif
 
-#if defined(PLATFORM_ANDROID)
-  if (game_status == GAME_MODE_PSEUDO_TYPENAME)
-  {
-    HandleTypeName(0, key);
-
+#if !defined(HAS_SCREEN_KEYBOARD)
+  // non-mobile devices: only handle key input with modifier keys pressed here
+  // (every other key input is handled directly as physical key input event)
+  if (!checkTextInputKeyModState())
     return;
-  }
 #endif
 
-  // only handle key input with text modifier keys pressed
-  if (checkTextInputKeyModState())
-  {
-    HandleKey(key, KEY_PRESSED);
-    HandleKey(key, KEY_RELEASED);
-  }
+  // process text input as "classic" (with uppercase etc.) key input event
+  HandleKey(key, KEY_PRESSED);
+  HandleKey(key, KEY_RELEASED);
 }
 
 void HandlePauseResumeEvent(PauseResumeEvent *event)
@@ -1209,14 +1209,12 @@ void HandleKeysDebug(Key key)
 
   if (game_status == GAME_MODE_PLAYING || !setup.debug.frame_delay_game_only)
   {
-    boolean mod_key_pressed = ((GetKeyModState() & KMOD_Control) ||
-                              (GetKeyModState() & KMOD_Alt) ||
-                              (GetKeyModState() & KMOD_Meta));
+    boolean mod_key_pressed = (GetKeyModState() != KMOD_None);
 
     for (i = 0; i < NUM_DEBUG_FRAME_DELAY_KEYS; i++)
     {
       if (key == setup.debug.frame_delay_key[i] &&
-         (mod_key_pressed || !setup.debug.frame_delay_use_mod_key))
+         (mod_key_pressed == setup.debug.frame_delay_use_mod_key))
       {
        GameFrameDelay = (GameFrameDelay != setup.debug.frame_delay[i] ?
                          setup.debug.frame_delay[i] : GAME_FRAME_DELAY);
@@ -1455,21 +1453,20 @@ void HandleKey(Key key, int key_status)
     return;
   }
 
-  if ((key == KSYM_minus ||
-       key == KSYM_plus ||
-       key == KSYM_equal ||    // ("Shift-=" is "+" on US keyboards)
-       key == KSYM_0) &&
-      ((GetKeyModState() & KMOD_Control) ||
-       (GetKeyModState() & KMOD_Alt) ||
-       (GetKeyModState() & KMOD_Meta)) &&
+  if ((key == KSYM_0     || key == KSYM_KP_0 ||
+       key == KSYM_minus || key == KSYM_KP_Subtract ||
+       key == KSYM_plus  || key == KSYM_KP_Add ||
+       key == KSYM_equal) &&   // ("Shift-=" is "+" on US keyboards)
+      (GetKeyModState() & (KMOD_Control | KMOD_Meta)) &&
       video.window_scaling_available &&
       !video.fullscreen_enabled)
   {
-    if (key == KSYM_0)
+    if (key == KSYM_0 || key == KSYM_KP_0)
       setup.window_scaling_percent = STD_WINDOW_SCALING_PERCENT;
+    else if (key == KSYM_minus || key == KSYM_KP_Subtract)
+      setup.window_scaling_percent -= STEP_WINDOW_SCALING_PERCENT;
     else
-      setup.window_scaling_percent +=
-       (key == KSYM_minus ? -1 : +1) * STEP_WINDOW_SCALING_PERCENT;
+      setup.window_scaling_percent += STEP_WINDOW_SCALING_PERCENT;
 
     if (setup.window_scaling_percent < MIN_WINDOW_SCALING_PERCENT)
       setup.window_scaling_percent = MIN_WINDOW_SCALING_PERCENT;