From 548c4a134d68fe61dcfc37694e1599d262283bb3 Mon Sep 17 00:00:00 2001 From: duvvuvenkataramana Date: Wed, 26 Nov 2025 01:14:31 +0530 Subject: [PATCH] =?UTF-8?q?[rcore][android]=20Fix=20GESTURE=5FNONE=20not?= =?UTF-8?q?=20being=20reported=20when=20touch=20point=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rgestures.h | 86 ++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/src/rgestures.h b/src/rgestures.h index 23e7397b7..4c2829689 100644 --- a/src/rgestures.h +++ b/src/rgestures.h @@ -368,48 +368,60 @@ void ProcessGestureEvent(GestureEvent event) GESTURES.current = GESTURE_HOLD; GESTURES.Hold.timeDuration = rgGetCurrentTime(); } - else if (event.touchAction == TOUCH_ACTION_MOVE) - { - GESTURES.Pinch.distance = rgVector2Distance(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB); + else if (event.touchAction == TOUCH_ACTION_MOVE) +{ + GESTURES.Pinch.distance = rgVector2Distance( + GESTURES.Touch.moveDownPositionA, + GESTURES.Touch.moveDownPositionB + ); - GESTURES.Touch.moveDownPositionA = event.position[0]; - GESTURES.Touch.moveDownPositionB = event.position[1]; + GESTURES.Touch.moveDownPositionA = event.position[0]; + GESTURES.Touch.moveDownPositionB = event.position[1]; - GESTURES.Pinch.vector.x = GESTURES.Touch.moveDownPositionB.x - GESTURES.Touch.moveDownPositionA.x; - GESTURES.Pinch.vector.y = GESTURES.Touch.moveDownPositionB.y - GESTURES.Touch.moveDownPositionA.y; + GESTURES.Pinch.vector.x = GESTURES.Touch.moveDownPositionB.x - GESTURES.Touch.moveDownPositionA.x; + GESTURES.Pinch.vector.y = GESTURES.Touch.moveDownPositionB.y - GESTURES.Touch.moveDownPositionA.y; - if ((rgVector2Distance(GESTURES.Touch.previousPositionA, GESTURES.Touch.moveDownPositionA) >= MINIMUM_PINCH) || (rgVector2Distance(GESTURES.Touch.previousPositionB, GESTURES.Touch.moveDownPositionB) >= MINIMUM_PINCH)) - { - if ( rgVector2Distance(GESTURES.Touch.previousPositionA, GESTURES.Touch.previousPositionB) > rgVector2Distance(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB) ) GESTURES.current = GESTURE_PINCH_IN; - else GESTURES.current = GESTURE_PINCH_OUT; - } - else - { - GESTURES.current = GESTURE_HOLD; - GESTURES.Hold.timeDuration = rgGetCurrentTime(); - } - - // NOTE: Angle should be inverted in Y - GESTURES.Pinch.angle = 360.0f - rgVector2Angle(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB); - } - else if (event.touchAction == TOUCH_ACTION_UP) - { - GESTURES.Pinch.distance = 0.0f; - GESTURES.Pinch.angle = 0.0f; - GESTURES.Pinch.vector = (Vector2){ 0.0f, 0.0f }; - GESTURES.Touch.pointCount = 0; - - GESTURES.current = GESTURE_NONE; - } - } - else if (GESTURES.Touch.pointCount == 0) // No touch points - { - GESTURES.current = GESTURE_NONE; - } - else if (GESTURES.Touch.pointCount > 2) // More than two touch points + if ((rgVector2Distance(GESTURES.Touch.previousPositionA, GESTURES.Touch.moveDownPositionA) >= MINIMUM_PINCH) || + (rgVector2Distance(GESTURES.Touch.previousPositionB, GESTURES.Touch.moveDownPositionB) >= MINIMUM_PINCH)) { - // TODO: Process gesture events for more than two points + if (rgVector2Distance(GESTURES.Touch.previousPositionA, GESTURES.Touch.previousPositionB) > + rgVector2Distance(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB)) + { + GESTURES.current = GESTURE_PINCH_IN; + } + else + { + GESTURES.current = GESTURE_PINCH_OUT; + } } + else + { + GESTURES.current = GESTURE_HOLD; + GESTURES.Hold.timeDuration = rgGetCurrentTime(); + } + + // NOTE: Angle should be inverted in Y + GESTURES.Pinch.angle = 360.0f - rgVector2Angle( + GESTURES.Touch.moveDownPositionA, + GESTURES.Touch.moveDownPositionB + ); +} +else if (event.touchAction == TOUCH_ACTION_UP) +{ + GESTURES.Pinch.distance = 0.0f; + GESTURES.Pinch.angle = 0.0f; + GESTURES.Pinch.vector = (Vector2){ 0.0f, 0.0f }; + GESTURES.Touch.pointCount = 0; + + GESTURES.current = GESTURE_NONE; +} +else if (GESTURES.Touch.pointCount == 0) // No touch points +{ + GESTURES.current = GESTURE_NONE; +} +else if (GESTURES.Touch.pointCount > 2) // More than two touch points +{ + // TODO: Process gesture events for more than two points } // Update gestures detected (must be called every frame)