From 51fb174984d6e0818b6563bc9d6c88f8891a508b Mon Sep 17 00:00:00 2001 From: Connor McLaughlin <stenzek@gmail.com> Date: Thu, 8 Oct 2020 18:33:04 +1000 Subject: [PATCH] Android: Fix multi-touch for touchscreen controller --- .../duckstation/TouchscreenControllerView.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java index bee9d8d41..f01d7c448 100644 --- a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java +++ b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java @@ -81,7 +81,6 @@ public class TouchscreenControllerView extends FrameLayout { switch (event.getActionMasked()) { case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { clearAllButtonPressedStates(); return true; @@ -89,15 +88,19 @@ public class TouchscreenControllerView extends FrameLayout { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: + case MotionEvent.ACTION_POINTER_UP: case MotionEvent.ACTION_MOVE: { - final int x = (int)event.getX(); - final int y = (int)event.getY(); Rect rect = new Rect(); - for (TouchscreenControllerButtonView buttonView : mButtonViews) - { + final int pointerCount = event.getPointerCount(); + for (TouchscreenControllerButtonView buttonView : mButtonViews) { buttonView.getHitRect(rect); - final boolean pressed = rect.contains(x, y); + boolean pressed = false; + for (int i = 0; i < pointerCount; i++) { + final int x = (int) event.getX(i); + final int y = (int) event.getY(i); + pressed |= rect.contains(x, y); + } if (buttonView.isPressed() == pressed) continue;