SDL_gesture: Handle SDL_EVENT_FINGER_CANCELED

From 2248f31c05bfdcffd906468f26cca96c2892654e Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 4 Nov 2025 10:46:29 -0800
Subject: [PATCH] Handle SDL_EVENT_FINGER_CANCELED

---
 SDL_gesture.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/SDL_gesture.h b/SDL_gesture.h
index b6a347e..0a3ce50 100644
--- a/SDL_gesture.h
+++ b/SDL_gesture.h
@@ -758,6 +758,22 @@ static void GestureProcessEvent(const SDL_Event *event)
             }
 
             /* inTouch->gestureLast[j] = inTouch->gestureLast[inTouch->numDownFingers]; */
+            if (inTouch->numDownFingers > 0) {
+                inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers + 1) - x) / inTouch->numDownFingers;
+                inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers + 1) - y) / inTouch->numDownFingers;
+            }
+        } else if (event->type == SDL_EVENT_FINGER_CANCELED) {
+            inTouch->numDownFingers--;
+
+            if (inTouch->recording) {
+                inTouch->recording = false;
+                if (GestureRecordAll) {
+                    for (i = 0; i < GestureNumTouches; i++) {
+                        GestureTouches[i].recording = false;
+                    }
+                }
+            }
+
             if (inTouch->numDownFingers > 0) {
                 inTouch->centroid.x = (inTouch->centroid.x * (inTouch->numDownFingers + 1) - x) / inTouch->numDownFingers;
                 inTouch->centroid.y = (inTouch->centroid.y * (inTouch->numDownFingers + 1) - y) / inTouch->numDownFingers;