diff options
Diffstat (limited to 'platform/android/java')
4 files changed, 23 insertions, 5 deletions
diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java index 3bbe35091c..ad1dc53bc0 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -988,4 +988,9 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC  	public void initInputDevices() {  		mRenderView.initInputDevices();  	} + +	@Keep +	private GodotRenderView getRenderView() { // used by native side to get renderView +		return mRenderView; +	}  } diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java index d731e080c4..2cd67933ee 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java @@ -144,6 +144,11 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView  		return inputHandler.onGenericMotionEvent(event) || super.onGenericMotionEvent(event);  	} +	@Override +	public boolean onCapturedPointerEvent(MotionEvent event) { +		return inputHandler.onGenericMotionEvent(event); +	} +  	private void init(XRMode xrMode, boolean translucent, int depth, int stencil) {  		setPreserveEGLContextOnPause(true);  		setFocusableInTouchMode(true); diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java index 6cd5ca7b4e..d5e0345a9c 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java @@ -120,6 +120,11 @@ public class GodotVulkanRenderView extends VkSurfaceView implements GodotRenderV  	}  	@Override +	public boolean onCapturedPointerEvent(MotionEvent event) { +		return mInputHandler.onGenericMotionEvent(event); +	} + +	@Override  	public void onResume() {  		super.onResume(); diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java index f3e985f944..b052cd9d92 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java @@ -181,6 +181,7 @@ public class GodotInputHandler implements InputDeviceListener {  				arr[i * 3 + 2] = event.getY(i);  			}  			final int action = event.getActionMasked(); +			final int pointer_idx = event.getPointerId(event.getActionIndex());  			mRenderView.queueOnRenderThread(new Runnable() {  				@Override @@ -189,12 +190,9 @@ public class GodotInputHandler implements InputDeviceListener {  						case MotionEvent.ACTION_DOWN:  						case MotionEvent.ACTION_CANCEL:  						case MotionEvent.ACTION_UP: -						case MotionEvent.ACTION_MOVE: { -							GodotLib.touch(event.getSource(), action, 0, evcount, arr); -						} break; +						case MotionEvent.ACTION_MOVE:  						case MotionEvent.ACTION_POINTER_UP:  						case MotionEvent.ACTION_POINTER_DOWN: { -							int pointer_idx = event.getPointerId(event.getActionIndex());  							GodotLib.touch(event.getSource(), action, pointer_idx, evcount, arr);  						} break;  					} @@ -247,7 +245,7 @@ public class GodotInputHandler implements InputDeviceListener {  				}  			});  			return true; -		} else if ((event.getSource() & InputDevice.SOURCE_MOUSE) == InputDevice.SOURCE_MOUSE) { +		} else if (event.isFromSource(InputDevice.SOURCE_MOUSE) || event.isFromSource(InputDevice.SOURCE_MOUSE_RELATIVE)) {  			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  				return handleMouseEvent(event);  			} @@ -464,6 +462,11 @@ public class GodotInputHandler implements InputDeviceListener {  					}  				});  			} +			case MotionEvent.ACTION_DOWN: +			case MotionEvent.ACTION_UP: { +				// we can safely ignore these cases because they are always come beside ACTION_BUTTON_PRESS and ACTION_BUTTON_RELEASE +				return true; +			}  		}  		return false;  	}  |