summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorubkp <[email protected]>2023-07-04 06:08:58 -0300
committerGitHub <[email protected]>2023-07-04 11:08:58 +0200
commitdd2d64e05804e749d470a9d252cea48b8b1d7e17 (patch)
tree8acac6f51491ab7cf00e6f46a90c502a59aa46fd
parentffe4d36e0af86ee2d72abe7607b0525e1ffcf61f (diff)
downloadraylib-dd2d64e05804e749d470a9d252cea48b8b1d7e17.tar.gz
raylib-dd2d64e05804e749d470a9d252cea48b8b1d7e17.zip
Fix pinch gestures for web (#3153)
-rw-r--r--src/rgestures.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/rgestures.h b/src/rgestures.h
index 0be2fbb5..1461a111 100644
--- a/src/rgestures.h
+++ b/src/rgestures.h
@@ -203,6 +203,8 @@ typedef struct {
Vector2 downDragPosition; // Touch drag position
Vector2 moveDownPositionA; // First touch down position on move
Vector2 moveDownPositionB; // Second touch down position on move
+ Vector2 previousPositionA; // Previous position A to compare for pinch gestures
+ Vector2 previousPositionB; // Previous position B to compare for pinch gestures
int tapCounter; // TAP counter (one tap implies TOUCH_ACTION_DOWN and TOUCH_ACTION_UP actions)
} Touch;
struct {
@@ -364,6 +366,9 @@ void ProcessGestureEvent(GestureEvent event)
GESTURES.Touch.downPositionA = event.position[0];
GESTURES.Touch.downPositionB = event.position[1];
+ GESTURES.Touch.previousPositionA = GESTURES.Touch.downPositionA;
+ GESTURES.Touch.previousPositionB = GESTURES.Touch.downPositionB;
+
//GESTURES.Pinch.distance = rgVector2Distance(GESTURES.Touch.downPositionA, GESTURES.Touch.downPositionB);
GESTURES.Pinch.vector.x = GESTURES.Touch.downPositionB.x - GESTURES.Touch.downPositionA.x;
@@ -376,18 +381,15 @@ void ProcessGestureEvent(GestureEvent event)
{
GESTURES.Pinch.distance = rgVector2Distance(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB);
- GESTURES.Touch.downPositionA = GESTURES.Touch.moveDownPositionA;
- GESTURES.Touch.downPositionB = GESTURES.Touch.moveDownPositionB;
-
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;
- if ((rgVector2Distance(GESTURES.Touch.downPositionA, GESTURES.Touch.moveDownPositionA) >= MINIMUM_PINCH) || (rgVector2Distance(GESTURES.Touch.downPositionB, GESTURES.Touch.moveDownPositionB) >= MINIMUM_PINCH))
+ if ((rgVector2Distance(GESTURES.Touch.previousPositionA, GESTURES.Touch.moveDownPositionA) >= MINIMUM_PINCH) || (rgVector2Distance(GESTURES.Touch.previousPositionB, GESTURES.Touch.moveDownPositionB) >= MINIMUM_PINCH))
{
- if ((rgVector2Distance(GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB) - GESTURES.Pinch.distance) < 0) GESTURES.current = GESTURE_PINCH_IN;
+ 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