3030
3131package org.godotengine.godot.input
3232
33- import android.os.Build
3433import android.view.GestureDetector.SimpleOnGestureListener
35- import android.view.InputDevice
3634import android.view.MotionEvent
3735import android.view.ScaleGestureDetector
3836import android.view.ScaleGestureDetector.OnScaleGestureListener
39- import org.godotengine.godot.GodotLib
4037
4138/* *
4239 * Handles regular and scale gesture input related events for the [GodotView] view.
@@ -51,12 +48,19 @@ internal class GodotGestureHandler(private val inputHandler: GodotInputHandler)
5148 }
5249
5350 /* *
54- * Enable pan and scale gestures
51+ * Enable panning gestures.
5552 */
56- var panningAndScalingEnabled = false
53+ var panningEnabled = false
54+
55+ /* *
56+ * Enable scaling gestures.
57+ */
58+ var scalingEnabled = false
5759
5860 var scrollDeadzoneDisabled = false
5961
62+ var longPressEnabled = false
63+
6064 /* *
6165 * Enable haptic feedback on long-press right-click
6266 */
@@ -181,15 +185,22 @@ internal class GodotGestureHandler(private val inputHandler: GodotInputHandler)
181185 override fun onDoubleTapEvent (event : MotionEvent ): Boolean {
182186 if (event.actionMasked == MotionEvent .ACTION_UP ) {
183187 nextDownIsDoubleTap = false
184- inputHandler.handleMotionEvent(event)
185- } else if (event.actionMasked == MotionEvent .ACTION_MOVE && ! panningAndScalingEnabled) {
188+
189+ // Long press is restored to its previous value.
190+ inputHandler.gestureDetector.setIsLongpressEnabled(longPressEnabled)
191+
192+ inputHandler.handleMotionEvent(event, event.actionMasked, true )
193+ } else if (event.actionMasked == MotionEvent .ACTION_MOVE && ! (scalingEnabled && inputHandler.scaleGestureDetector.isQuickScaleEnabled)) {
186194 inputHandler.handleMotionEvent(event)
187195 }
188196
189197 return true
190198 }
191199
192200 override fun onDoubleTap (event : MotionEvent ): Boolean {
201+ // Long press is disabled as it interferes with double tap events.
202+ inputHandler.gestureDetector.setIsLongpressEnabled(false )
203+
193204 nextDownIsDoubleTap = true
194205 return true
195206 }
@@ -214,7 +225,7 @@ internal class GodotGestureHandler(private val inputHandler: GodotInputHandler)
214225
215226 val x = terminusEvent.x
216227 val y = terminusEvent.y
217- if (terminusEvent.pointerCount >= 2 && panningAndScalingEnabled && ! pointerCaptureInProgress && ! dragInProgress) {
228+ if (terminusEvent.pointerCount >= 2 && panningEnabled && ! pointerCaptureInProgress && ! dragInProgress) {
218229 inputHandler.handlePanEvent(x, y, distanceX / 5f , distanceY / 5f )
219230 } else if (! scaleInProgress) {
220231 dragInProgress = true
@@ -226,7 +237,7 @@ internal class GodotGestureHandler(private val inputHandler: GodotInputHandler)
226237 }
227238
228239 override fun onScale (detector : ScaleGestureDetector ): Boolean {
229- if (! panningAndScalingEnabled || pointerCaptureInProgress || dragInProgress) {
240+ if (! scalingEnabled || pointerCaptureInProgress || dragInProgress) {
230241 return false
231242 }
232243
@@ -237,7 +248,7 @@ internal class GodotGestureHandler(private val inputHandler: GodotInputHandler)
237248 }
238249
239250 override fun onScaleBegin (detector : ScaleGestureDetector ): Boolean {
240- if (! panningAndScalingEnabled || pointerCaptureInProgress || dragInProgress) {
251+ if (! scalingEnabled || pointerCaptureInProgress || dragInProgress) {
241252 return false
242253 }
243254 scaleInProgress = true
0 commit comments