react-native-gesture-handler 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/android/build.gradle +2 -2
  2. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  3. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  4. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  5. package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
  6. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
  7. package/lib/commonjs/RNGestureHandlerModule.js +1 -1
  8. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  9. package/lib/commonjs/RNGestureHandlerModule.macos.js +20 -9
  10. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  11. package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
  12. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  13. package/lib/commonjs/components/GestureComponents.web.js +1 -1
  14. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  15. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  16. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  17. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  18. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  19. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  21. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  22. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  23. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  24. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  25. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  26. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  27. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  28. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  29. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  30. package/lib/commonjs/web/handlers/GestureHandler.js +282 -79
  31. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  32. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  33. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  34. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  35. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  36. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  37. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  38. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  39. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  40. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  41. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  42. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  43. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  44. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  45. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  46. package/lib/commonjs/web/interfaces.js +22 -1
  47. package/lib/commonjs/web/interfaces.js.map +1 -1
  48. package/lib/commonjs/web/tools/EventManager.js +40 -96
  49. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  50. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  51. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  52. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  53. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  54. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  55. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  56. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  57. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  58. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  59. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  60. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  61. package/lib/commonjs/web/utils.js +15 -0
  62. package/lib/commonjs/web/utils.js.map +1 -0
  63. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  64. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  65. package/lib/module/RNGestureHandlerModule.js +1 -1
  66. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  67. package/lib/module/RNGestureHandlerModule.macos.js +19 -10
  68. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  69. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  70. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  71. package/lib/module/components/GestureComponents.web.js +1 -1
  72. package/lib/module/components/GestureComponents.web.js.map +1 -1
  73. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  74. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  75. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  76. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  77. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  78. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  79. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  80. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  81. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  82. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  83. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  84. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  85. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  86. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  87. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  88. package/lib/module/web/handlers/GestureHandler.js +276 -79
  89. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  90. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  91. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  92. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  93. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  94. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  95. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  96. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  97. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  98. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  99. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  100. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  101. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  103. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  104. package/lib/module/web/interfaces.js +19 -0
  105. package/lib/module/web/interfaces.js.map +1 -1
  106. package/lib/module/web/tools/EventManager.js +39 -95
  107. package/lib/module/web/tools/EventManager.js.map +1 -1
  108. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  109. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  110. package/lib/module/web/tools/InteractionManager.js +24 -10
  111. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  112. package/lib/module/web/tools/NodeManager.js.map +1 -1
  113. package/lib/module/web/tools/PointerEventManager.js +116 -0
  114. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  115. package/lib/module/web/tools/PointerTracker.js +97 -7
  116. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  117. package/lib/module/web/tools/TouchEventManager.js +124 -0
  118. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  119. package/lib/module/web/utils.js +8 -0
  120. package/lib/module/web/utils.js.map +1 -0
  121. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +5 -2
  122. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  123. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  124. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  125. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  126. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  127. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  128. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  129. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  130. package/lib/typescript/web/handlers/GestureHandler.d.ts +41 -32
  131. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  132. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  133. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  134. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  135. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  136. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  137. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  138. package/lib/typescript/web/interfaces.d.ts +50 -10
  139. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  140. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  141. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  142. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  143. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  144. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  145. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  146. package/lib/typescript/web/utils.d.ts +4 -0
  147. package/package.json +2 -2
  148. package/src/EnableExperimentalWebImplementation.ts +9 -0
  149. package/src/RNGestureHandlerModule.macos.ts +25 -10
  150. package/src/RNGestureHandlerModule.ts +4 -1
  151. package/src/RNGestureHandlerModule.web.ts +20 -7
  152. package/src/components/GestureComponents.web.tsx +1 -1
  153. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  154. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  155. package/src/handlers/gestures/GestureDetector.tsx +0 -1
  156. package/src/handlers/gestures/eventReceiver.ts +23 -24
  157. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  158. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  159. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  160. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  161. package/src/web/handlers/GestureHandler.ts +306 -97
  162. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  163. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  164. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  165. package/src/web/handlers/PanGestureHandler.ts +68 -53
  166. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  167. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  168. package/src/web/handlers/TapGestureHandler.ts +74 -56
  169. package/src/web/interfaces.ts +57 -10
  170. package/src/web/tools/EventManager.ts +58 -148
  171. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  172. package/src/web/tools/InteractionManager.ts +25 -9
  173. package/src/web/tools/NodeManager.ts +6 -6
  174. package/src/web/tools/PointerEventManager.ts +134 -0
  175. package/src/web/tools/PointerTracker.ts +120 -10
  176. package/src/web/tools/TouchEventManager.ts +167 -0
  177. package/src/web/utils.ts +8 -0
@@ -6,32 +6,20 @@ import {
6
6
  GestureUpdateEvent,
7
7
  GestureStateChangeEvent,
8
8
  } from '../gestureHandlerCommon';
9
- import { GestureStateManagerType } from './gestureStateManager';
10
9
  import { findHandler, findOldGestureHandler } from '../handlersRegistry';
11
10
  import { BaseGesture } from './gesture';
12
- import { tagMessage } from '../../utils';
11
+ import {
12
+ GestureStateManager,
13
+ GestureStateManagerType,
14
+ } from './gestureStateManager';
13
15
 
14
16
  let gestureHandlerEventSubscription: EmitterSubscription | null = null;
15
17
  let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
16
18
 
17
- const warningMessage = tagMessage(
18
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
19
- );
20
-
21
- const dummyStateManager: GestureStateManagerType = {
22
- begin: () => {
23
- console.warn(warningMessage);
24
- },
25
- activate: () => {
26
- console.warn(warningMessage);
27
- },
28
- end: () => {
29
- console.warn(warningMessage);
30
- },
31
- fail: () => {
32
- console.warn(warningMessage);
33
- },
34
- };
19
+ const gestureStateManagers: Map<number, GestureStateManagerType> = new Map<
20
+ number,
21
+ GestureStateManagerType
22
+ >();
35
23
 
36
24
  const lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];
37
25
 
@@ -83,21 +71,32 @@ export function onGestureHandlerEvent(
83
71
  handler.handlers.onEnd?.(event, false);
84
72
  }
85
73
  handler.handlers.onFinalize?.(event, false);
74
+ gestureStateManagers.delete(event.handlerTag);
86
75
  lastUpdateEvent[handler.handlers.handlerTag] = undefined;
87
76
  }
88
77
  } else if (isTouchEvent(event)) {
78
+ if (!gestureStateManagers.has(event.handlerTag)) {
79
+ gestureStateManagers.set(
80
+ event.handlerTag,
81
+ GestureStateManager.create(event.handlerTag)
82
+ );
83
+ }
84
+
85
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
86
+ const manager = gestureStateManagers.get(event.handlerTag)!;
87
+
89
88
  switch (event.eventType) {
90
89
  case TouchEventType.TOUCHES_DOWN:
91
- handler.handlers?.onTouchesDown?.(event, dummyStateManager);
90
+ handler.handlers?.onTouchesDown?.(event, manager);
92
91
  break;
93
92
  case TouchEventType.TOUCHES_MOVE:
94
- handler.handlers?.onTouchesMove?.(event, dummyStateManager);
93
+ handler.handlers?.onTouchesMove?.(event, manager);
95
94
  break;
96
95
  case TouchEventType.TOUCHES_UP:
97
- handler.handlers?.onTouchesUp?.(event, dummyStateManager);
96
+ handler.handlers?.onTouchesUp?.(event, manager);
98
97
  break;
99
98
  case TouchEventType.TOUCHES_CANCELLED:
100
- handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);
99
+ handler.handlers?.onTouchesCancelled?.(event, manager);
101
100
  break;
102
101
  }
103
102
  } else {
@@ -0,0 +1,24 @@
1
+ import NodeManager from '../../web/tools/NodeManager';
2
+ import { GestureStateManagerType } from './gestureStateManager';
3
+
4
+ export const GestureStateManager = {
5
+ create(handlerTag: number): GestureStateManagerType {
6
+ return {
7
+ begin: () => {
8
+ NodeManager.getHandler(handlerTag).begin();
9
+ },
10
+
11
+ activate: () => {
12
+ NodeManager.getHandler(handlerTag).activate();
13
+ },
14
+
15
+ fail: () => {
16
+ NodeManager.getHandler(handlerTag).fail();
17
+ },
18
+
19
+ end: () => {
20
+ NodeManager.getHandler(handlerTag).end();
21
+ },
22
+ };
23
+ },
24
+ };
@@ -1,29 +1,17 @@
1
- import { AdaptedPointerEvent, EventTypes } from '../interfaces';
1
+ import { AdaptedEvent, EventTypes } from '../interfaces';
2
2
  import PointerTracker from '../tools/PointerTracker';
3
3
 
4
4
  export interface RotationGestureListener {
5
5
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
6
- onRotation: (
7
- detector: RotationGestureDetector,
8
- event: AdaptedPointerEvent
9
- ) => boolean;
10
- onRotationEnd: (
11
- detector: RotationGestureDetector,
12
- event: AdaptedPointerEvent
13
- ) => void;
6
+ onRotation: (detector: RotationGestureDetector) => boolean;
7
+ onRotationEnd: (detector: RotationGestureDetector) => void;
14
8
  }
15
9
 
16
10
  export default class RotationGestureDetector
17
11
  implements RotationGestureListener {
18
12
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
19
- onRotation: (
20
- detector: RotationGestureDetector,
21
- event: AdaptedPointerEvent
22
- ) => boolean;
23
- onRotationEnd: (
24
- detector: RotationGestureDetector,
25
- event: AdaptedPointerEvent
26
- ) => void;
13
+ onRotation: (detector: RotationGestureDetector) => boolean;
14
+ onRotationEnd: (detector: RotationGestureDetector) => void;
27
15
 
28
16
  private currentTime = 0;
29
17
  private previousTime = 0;
@@ -44,10 +32,7 @@ export default class RotationGestureDetector
44
32
  this.onRotationEnd = callbacks.onRotationEnd;
45
33
  }
46
34
 
47
- private updateCurrent(
48
- event: AdaptedPointerEvent,
49
- tracker: PointerTracker
50
- ): void {
35
+ private updateCurrent(event: AdaptedEvent, tracker: PointerTracker): void {
51
36
  this.previousTime = this.currentTime;
52
37
  this.currentTime = event.time;
53
38
 
@@ -66,6 +51,7 @@ export default class RotationGestureDetector
66
51
 
67
52
  //Angle diff should be positive when rotating in clockwise direction
68
53
  const angle: number = -Math.atan2(vectorY, vectorX);
54
+
69
55
  this.rotation = Number.isNaN(this.previousAngle)
70
56
  ? 0
71
57
  : this.previousAngle - angle;
@@ -85,14 +71,14 @@ export default class RotationGestureDetector
85
71
  }
86
72
  }
87
73
 
88
- private finish(event: AdaptedPointerEvent): void {
74
+ private finish(): void {
89
75
  if (!this.isInProgress) {
90
76
  return;
91
77
  }
92
78
 
93
79
  this.isInProgress = false;
94
80
  this.keyPointers = [NaN, NaN];
95
- this.onRotationEnd(this, event);
81
+ this.onRotationEnd(this);
96
82
  }
97
83
 
98
84
  private setKeyPointers(tracker: PointerTracker): void {
@@ -106,12 +92,7 @@ export default class RotationGestureDetector
106
92
  this.keyPointers[1] = pointerIDs.next().value as number;
107
93
  }
108
94
 
109
- public onTouchEvent(
110
- event: AdaptedPointerEvent,
111
- tracker: PointerTracker
112
- ): boolean {
113
- this.adaptEvent(event, tracker);
114
-
95
+ public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {
115
96
  switch (event.eventType) {
116
97
  case EventTypes.DOWN:
117
98
  this.isInProgress = false;
@@ -121,7 +102,6 @@ export default class RotationGestureDetector
121
102
  if (this.isInProgress) {
122
103
  break;
123
104
  }
124
-
125
105
  this.isInProgress = true;
126
106
 
127
107
  this.previousTime = event.time;
@@ -139,7 +119,7 @@ export default class RotationGestureDetector
139
119
  }
140
120
 
141
121
  this.updateCurrent(event, tracker);
142
- this.onRotation(this, event);
122
+ this.onRotation(this);
143
123
 
144
124
  break;
145
125
 
@@ -149,38 +129,21 @@ export default class RotationGestureDetector
149
129
  }
150
130
 
151
131
  if (this.keyPointers.indexOf(event.pointerId) >= 0) {
152
- this.finish(event);
132
+ this.finish();
153
133
  }
154
134
 
155
135
  break;
156
136
 
157
137
  case EventTypes.UP:
158
- this.finish(event);
138
+ if (this.isInProgress) {
139
+ this.finish();
140
+ }
159
141
  break;
160
142
  }
161
143
 
162
144
  return true;
163
145
  }
164
146
 
165
- private adaptEvent(
166
- event: AdaptedPointerEvent,
167
- tracker: PointerTracker
168
- ): void {
169
- if (
170
- tracker.getTrackedPointersCount() &&
171
- event.eventType === EventTypes.DOWN
172
- ) {
173
- event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
174
- }
175
-
176
- if (
177
- tracker.getTrackedPointersCount() > 1 &&
178
- event.eventType === EventTypes.UP
179
- ) {
180
- event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
181
- }
182
- }
183
-
184
147
  public getTimeDelta(): number {
185
148
  return this.currentTime + this.previousTime;
186
149
  }
@@ -196,4 +159,9 @@ export default class RotationGestureDetector
196
159
  public getRotation(): number {
197
160
  return this.rotation;
198
161
  }
162
+
163
+ public reset(): void {
164
+ this.keyPointers = [NaN, NaN];
165
+ this.isInProgress = false;
166
+ }
199
167
  }
@@ -1,30 +1,18 @@
1
1
  import { DEFAULT_TOUCH_SLOP } from '../constants';
2
- import { AdaptedPointerEvent, EventTypes } from '../interfaces';
2
+ import { AdaptedEvent, EventTypes } from '../interfaces';
3
3
 
4
4
  import PointerTracker from '../tools/PointerTracker';
5
5
 
6
6
  export interface ScaleGestureListener {
7
7
  onScaleBegin: (detector: ScaleGestureDetector) => boolean;
8
- onScale: (
9
- detector: ScaleGestureDetector,
10
- event: AdaptedPointerEvent
11
- ) => boolean;
12
- onScaleEnd: (
13
- detector: ScaleGestureDetector,
14
- event: AdaptedPointerEvent
15
- ) => void;
8
+ onScale: (detector: ScaleGestureDetector) => boolean;
9
+ onScaleEnd: (detector: ScaleGestureDetector) => void;
16
10
  }
17
11
 
18
12
  export default class ScaleGestureDetector implements ScaleGestureListener {
19
13
  public onScaleBegin: (detector: ScaleGestureDetector) => boolean;
20
- public onScale: (
21
- detector: ScaleGestureDetector,
22
- event: AdaptedPointerEvent
23
- ) => boolean;
24
- public onScaleEnd: (
25
- detector: ScaleGestureDetector,
26
- event: AdaptedPointerEvent
27
- ) => void;
14
+ public onScale: (detector: ScaleGestureDetector) => boolean;
15
+ public onScaleEnd: (detector: ScaleGestureDetector) => void;
28
16
 
29
17
  private focusX!: number;
30
18
  private focusY!: number;
@@ -50,12 +38,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
50
38
  this.minSpan = 0;
51
39
  }
52
40
 
53
- public onTouchEvent(
54
- event: AdaptedPointerEvent,
55
- tracker: PointerTracker
56
- ): boolean {
57
- this.adaptEvent(event, tracker);
58
-
41
+ public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {
59
42
  this.currentTime = event.time;
60
43
 
61
44
  const action: EventTypes = event.eventType;
@@ -68,7 +51,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
68
51
 
69
52
  if (action === EventTypes.DOWN || streamComplete) {
70
53
  if (this.inProgress) {
71
- this.onScaleEnd(this, event);
54
+ this.onScaleEnd(this);
72
55
  this.inProgress = false;
73
56
  this.initialSpan = 0;
74
57
  }
@@ -127,7 +110,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
127
110
  this.focusY = focusY;
128
111
 
129
112
  if (this.inProgress && (span < this.minSpan || configChanged)) {
130
- this.onScaleEnd(this, event);
113
+ this.onScaleEnd(this);
131
114
  this.inProgress = false;
132
115
  this.initialSpan = span;
133
116
  }
@@ -153,7 +136,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
153
136
 
154
137
  this.currentSpan = span;
155
138
 
156
- if (this.inProgress && !this.onScale(this, event)) {
139
+ if (this.inProgress && !this.onScale(this)) {
157
140
  return true;
158
141
  }
159
142
 
@@ -163,25 +146,6 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
163
146
  return true;
164
147
  }
165
148
 
166
- private adaptEvent(
167
- event: AdaptedPointerEvent,
168
- tracker: PointerTracker
169
- ): void {
170
- if (
171
- tracker.getTrackedPointersCount() > 1 &&
172
- event.eventType === EventTypes.DOWN
173
- ) {
174
- event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
175
- }
176
-
177
- if (
178
- tracker.getTrackedPointersCount() > 1 &&
179
- event.eventType === EventTypes.UP
180
- ) {
181
- event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
182
- }
183
- }
184
-
185
149
  public getCurrentSpan(): number {
186
150
  return this.currentSpan;
187
151
  }
@@ -1,6 +1,6 @@
1
1
  import { State } from '../../State';
2
2
  import { Direction } from '../constants';
3
- import { AdaptedPointerEvent } from '../interfaces';
3
+ import { AdaptedEvent, Config } from '../interfaces';
4
4
 
5
5
  import GestureHandler from './GestureHandler';
6
6
 
@@ -26,7 +26,7 @@ export default class FlingGestureHandler extends GestureHandler {
26
26
  super.init(ref, propsRef);
27
27
  }
28
28
 
29
- public updateGestureConfig({ enabled = true, ...props }): void {
29
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
30
30
  super.updateGestureConfig({ enabled: enabled, ...props });
31
31
 
32
32
  this.enabled = enabled;
@@ -40,27 +40,29 @@ export default class FlingGestureHandler extends GestureHandler {
40
40
  }
41
41
  }
42
42
 
43
- protected transformNativeEvent(event: AdaptedPointerEvent) {
43
+ protected transformNativeEvent() {
44
+ const rect: DOMRect = this.view.getBoundingClientRect();
45
+
44
46
  return {
45
- x: event.offsetX,
46
- y: event.offsetY,
47
- absoluteX: event.x,
48
- absoluteY: event.y,
47
+ x: this.tracker.getLastAvgX() - rect.left,
48
+ y: this.tracker.getLastAvgY() - rect.top,
49
+ absoluteX: this.tracker.getLastAvgX(),
50
+ absoluteY: this.tracker.getLastAvgY(),
49
51
  };
50
52
  }
51
53
 
52
- private startFling(event: AdaptedPointerEvent): void {
54
+ private startFling(event: AdaptedEvent): void {
53
55
  this.startX = event.x;
54
56
  this.startY = event.y;
55
57
 
56
- this.begin(event);
58
+ this.begin();
57
59
 
58
60
  this.maxNumberOfPointersSimultaneously = 1;
59
61
 
60
- this.delayTimeout = setTimeout(() => this.fail(event), this.maxDurationMs);
62
+ this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
61
63
  }
62
64
 
63
- private tryEndFling(event: AdaptedPointerEvent): boolean {
65
+ private tryEndFling(event: AdaptedEvent): boolean {
64
66
  if (
65
67
  this.maxNumberOfPointersSimultaneously ===
66
68
  this.numberOfPointersRequired &&
@@ -74,7 +76,7 @@ export default class FlingGestureHandler extends GestureHandler {
74
76
  event.y - this.startY > this.minAcceptableDelta))
75
77
  ) {
76
78
  clearTimeout(this.delayTimeout);
77
- this.activate(event);
79
+ this.activate();
78
80
 
79
81
  return true;
80
82
  }
@@ -82,17 +84,25 @@ export default class FlingGestureHandler extends GestureHandler {
82
84
  return false;
83
85
  }
84
86
 
85
- private endFling(event: AdaptedPointerEvent) {
87
+ private endFling(event: AdaptedEvent) {
86
88
  if (!this.tryEndFling(event)) {
87
- this.fail(event);
89
+ this.fail();
88
90
  }
89
91
  }
90
92
 
91
- protected onPointerDown(event: AdaptedPointerEvent): void {
93
+ protected onPointerDown(event: AdaptedEvent): void {
94
+ this.tracker.addToTracker(event);
92
95
  super.onPointerDown(event);
96
+ this.newPointerAction(event);
97
+ }
93
98
 
99
+ protected onPointerAdd(event: AdaptedEvent): void {
94
100
  this.tracker.addToTracker(event);
101
+ super.onPointerAdd(event);
102
+ this.newPointerAction(event);
103
+ }
95
104
 
105
+ private newPointerAction(event: AdaptedEvent): void {
96
106
  if (this.currentState === State.UNDETERMINED) {
97
107
  this.startFling(event);
98
108
  }
@@ -111,7 +121,7 @@ export default class FlingGestureHandler extends GestureHandler {
111
121
  }
112
122
  }
113
123
 
114
- protected onPointerMove(event: AdaptedPointerEvent): void {
124
+ protected onPointerMove(event: AdaptedEvent): void {
115
125
  this.tracker.track(event);
116
126
 
117
127
  if (this.currentState !== State.BEGAN) {
@@ -123,19 +133,32 @@ export default class FlingGestureHandler extends GestureHandler {
123
133
  super.onPointerMove(event);
124
134
  }
125
135
 
126
- protected onPointerUp(event: AdaptedPointerEvent): void {
127
- this.tracker.removeFromTracker(event.pointerId);
136
+ protected onPointerUp(event: AdaptedEvent): void {
137
+ super.onPointerUp(event);
138
+ this.onUp(event);
139
+ }
128
140
 
141
+ protected onPointerRemove(event: AdaptedEvent): void {
142
+ super.onPointerRemove(event);
143
+ this.onUp(event);
144
+ }
145
+
146
+ private onUp(event: AdaptedEvent): void {
147
+ this.tracker.removeFromTracker(event.pointerId);
129
148
  if (this.currentState !== State.BEGAN) {
130
149
  return;
131
150
  }
132
-
133
151
  this.endFling(event);
134
152
  }
135
153
 
136
- protected activate(event: AdaptedPointerEvent, force?: boolean): void {
137
- super.activate(event, force);
138
- this.end(event);
154
+ protected onPointerCancel(event: AdaptedEvent): void {
155
+ super.onPointerCancel(event);
156
+ this.reset();
157
+ }
158
+
159
+ public activate(force?: boolean): void {
160
+ super.activate(force);
161
+ this.end();
139
162
  }
140
163
 
141
164
  protected resetConfig(): void {