react-native-gesture-handler 2.6.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
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 {