react-native-gesture-handler 2.6.0 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (196) 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 +22 -13
  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.js +6 -4
  14. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  15. package/lib/commonjs/components/GestureComponents.web.js +1 -1
  16. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  17. package/lib/commonjs/components/Swipeable.js +4 -4
  18. package/lib/commonjs/components/Swipeable.js.map +1 -1
  19. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  20. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  21. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  22. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  23. package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
  24. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  26. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  27. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  28. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  29. package/lib/commonjs/utils.js +10 -6
  30. package/lib/commonjs/utils.js.map +1 -1
  31. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  32. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  33. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  34. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  35. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  36. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  37. package/lib/commonjs/web/handlers/GestureHandler.js +330 -79
  38. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  39. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  40. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  41. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  42. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  43. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  44. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  45. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  46. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  47. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  48. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  49. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  50. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  52. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/interfaces.js +22 -1
  54. package/lib/commonjs/web/interfaces.js.map +1 -1
  55. package/lib/commonjs/web/tools/EventManager.js +40 -96
  56. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  57. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  58. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  59. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  60. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  61. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  62. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  63. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  64. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  65. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  66. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  67. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  68. package/lib/commonjs/web/utils.js +15 -0
  69. package/lib/commonjs/web/utils.js.map +1 -0
  70. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  71. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  72. package/lib/module/RNGestureHandlerModule.js +1 -1
  73. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/module/RNGestureHandlerModule.macos.js +21 -14
  75. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  76. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  77. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  78. package/lib/module/components/GestureComponents.js +6 -4
  79. package/lib/module/components/GestureComponents.js.map +1 -1
  80. package/lib/module/components/GestureComponents.web.js +1 -1
  81. package/lib/module/components/GestureComponents.web.js.map +1 -1
  82. package/lib/module/components/Swipeable.js +4 -4
  83. package/lib/module/components/Swipeable.js.map +1 -1
  84. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  85. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  86. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  87. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  88. package/lib/module/handlers/gestures/GestureDetector.js +5 -3
  89. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  90. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  91. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  92. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  93. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  94. package/lib/module/utils.js +7 -6
  95. package/lib/module/utils.js.map +1 -1
  96. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  97. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  98. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  99. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  100. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  101. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/GestureHandler.js +324 -79
  103. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  104. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  105. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  106. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  107. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  108. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  109. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  110. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  111. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  112. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  113. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  114. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  115. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  116. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  117. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  118. package/lib/module/web/interfaces.js +19 -0
  119. package/lib/module/web/interfaces.js.map +1 -1
  120. package/lib/module/web/tools/EventManager.js +39 -95
  121. package/lib/module/web/tools/EventManager.js.map +1 -1
  122. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  123. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  124. package/lib/module/web/tools/InteractionManager.js +24 -10
  125. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  126. package/lib/module/web/tools/NodeManager.js.map +1 -1
  127. package/lib/module/web/tools/PointerEventManager.js +116 -0
  128. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  129. package/lib/module/web/tools/PointerTracker.js +97 -7
  130. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  131. package/lib/module/web/tools/TouchEventManager.js +124 -0
  132. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  133. package/lib/module/web/utils.js +8 -0
  134. package/lib/module/web/utils.js.map +1 -0
  135. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +6 -3
  136. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  137. package/lib/typescript/components/Swipeable.d.ts +3 -3
  138. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  139. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  140. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  141. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  142. package/lib/typescript/utils.d.ts +4 -0
  143. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  144. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  145. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  146. package/lib/typescript/web/handlers/GestureHandler.d.ts +42 -32
  147. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  148. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  149. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  150. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  151. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  152. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  153. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  154. package/lib/typescript/web/interfaces.d.ts +50 -10
  155. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  156. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  157. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  158. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  159. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  160. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  161. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  162. package/lib/typescript/web/utils.d.ts +4 -0
  163. package/package.json +2 -2
  164. package/src/EnableExperimentalWebImplementation.ts +9 -0
  165. package/src/RNGestureHandlerModule.macos.ts +28 -13
  166. package/src/RNGestureHandlerModule.ts +4 -1
  167. package/src/RNGestureHandlerModule.web.ts +20 -7
  168. package/src/components/GestureComponents.tsx +12 -16
  169. package/src/components/GestureComponents.web.tsx +1 -1
  170. package/src/components/Swipeable.tsx +11 -7
  171. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  172. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  173. package/src/handlers/gestures/GestureDetector.tsx +8 -4
  174. package/src/handlers/gestures/eventReceiver.ts +23 -24
  175. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  176. package/src/utils.ts +6 -6
  177. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  178. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  179. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  180. package/src/web/handlers/GestureHandler.ts +365 -97
  181. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  182. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  183. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  184. package/src/web/handlers/PanGestureHandler.ts +68 -53
  185. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  186. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  187. package/src/web/handlers/TapGestureHandler.ts +74 -56
  188. package/src/web/interfaces.ts +57 -10
  189. package/src/web/tools/EventManager.ts +58 -148
  190. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  191. package/src/web/tools/InteractionManager.ts +25 -9
  192. package/src/web/tools/NodeManager.ts +6 -6
  193. package/src/web/tools/PointerEventManager.ts +134 -0
  194. package/src/web/tools/PointerTracker.ts +120 -10
  195. package/src/web/tools/TouchEventManager.ts +167 -0
  196. package/src/web/utils.ts +8 -0
@@ -1,5 +1,5 @@
1
1
  import { State } from '../../State';
2
- import { AdaptedPointerEvent } from '../interfaces';
2
+ import { AdaptedEvent, Config } from '../interfaces';
3
3
 
4
4
  import GestureHandler from './GestureHandler';
5
5
 
@@ -25,17 +25,19 @@ export default class LongPressGestureHandler extends GestureHandler {
25
25
  this.setShouldCancelWhenOutside(true);
26
26
  }
27
27
 
28
- protected transformNativeEvent(event: AdaptedPointerEvent) {
28
+ protected transformNativeEvent() {
29
+ const rect: DOMRect = this.view.getBoundingClientRect();
30
+
29
31
  return {
30
- x: event.offsetX,
31
- y: event.offsetY,
32
- absoluteX: event.x,
33
- absoluteY: event.y,
32
+ x: this.tracker.getLastAvgX() - rect.left,
33
+ y: this.tracker.getLastAvgY() - rect.top,
34
+ absoluteX: this.tracker.getLastAvgX(),
35
+ absoluteY: this.tracker.getLastAvgY(),
34
36
  duration: Date.now() - this.startTime,
35
37
  };
36
38
  }
37
39
 
38
- public updateGestureConfig({ enabled = true, ...props }): void {
40
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
39
41
  super.updateGestureConfig({ enabled: enabled, ...props });
40
42
 
41
43
  this.enabled = enabled;
@@ -59,28 +61,32 @@ export default class LongPressGestureHandler extends GestureHandler {
59
61
  clearTimeout(this.activationTimeout);
60
62
  }
61
63
 
62
- protected onPointerDown(event: AdaptedPointerEvent): void {
64
+ protected onPointerDown(event: AdaptedEvent): void {
65
+ this.tracker.addToTracker(event);
63
66
  super.onPointerDown(event);
64
67
  this.tryBegin(event);
65
- this.tryActivate(event);
68
+ this.tryActivate();
69
+ this.checkDistanceFail(event);
70
+ }
71
+
72
+ protected onPointerMove(event: AdaptedEvent): void {
73
+ super.onPointerMove(event);
74
+ this.tracker.track(event);
66
75
  this.checkDistanceFail(event);
67
76
  }
68
77
 
69
- protected onPointerUp(event: AdaptedPointerEvent): void {
78
+ protected onPointerUp(event: AdaptedEvent): void {
70
79
  super.onPointerUp(event);
80
+ this.tracker.removeFromTracker(event.pointerId);
71
81
 
72
82
  if (this.currentState === State.ACTIVE) {
73
- this.end(event);
83
+ this.end();
74
84
  } else {
75
- this.fail(event);
85
+ this.fail();
76
86
  }
77
87
  }
78
88
 
79
- protected onPointerMove(event: AdaptedPointerEvent): void {
80
- this.checkDistanceFail(event);
81
- }
82
-
83
- private tryBegin(event: AdaptedPointerEvent): void {
89
+ private tryBegin(event: AdaptedEvent): void {
84
90
  if (this.currentState !== State.UNDETERMINED) {
85
91
  return;
86
92
  }
@@ -88,23 +94,23 @@ export default class LongPressGestureHandler extends GestureHandler {
88
94
  this.previousTime = Date.now();
89
95
  this.startTime = this.previousTime;
90
96
 
91
- this.begin(event);
97
+ this.begin();
92
98
 
93
99
  this.startX = event.x;
94
100
  this.startY = event.y;
95
101
  }
96
102
 
97
- private tryActivate(event: AdaptedPointerEvent): void {
103
+ private tryActivate(): void {
98
104
  if (this.minDurationMs > 0) {
99
105
  this.activationTimeout = setTimeout(() => {
100
- this.activate(event);
106
+ this.activate();
101
107
  }, this.minDurationMs);
102
108
  } else if (this.minDurationMs === 0) {
103
- this.activate(event);
109
+ this.activate();
104
110
  }
105
111
  }
106
112
 
107
- private checkDistanceFail(event: AdaptedPointerEvent): void {
113
+ private checkDistanceFail(event: AdaptedEvent): void {
108
114
  const dx = event.x - this.startX;
109
115
  const dy = event.y - this.startY;
110
116
  const distSq = dx * dx + dy * dy;
@@ -114,9 +120,9 @@ export default class LongPressGestureHandler extends GestureHandler {
114
120
  }
115
121
 
116
122
  if (this.currentState === State.ACTIVE) {
117
- this.cancel(event);
123
+ this.cancel();
118
124
  } else {
119
- this.fail(event);
125
+ this.fail();
120
126
  }
121
127
  }
122
128
  }
@@ -0,0 +1,39 @@
1
+ import { AdaptedEvent } from '../interfaces';
2
+ import GestureHandler from './GestureHandler';
3
+
4
+ export default class ManualGestureHandler extends GestureHandler {
5
+ public init(ref: number, propsRef: React.RefObject<unknown>) {
6
+ super.init(ref, propsRef);
7
+ }
8
+
9
+ protected onPointerDown(event: AdaptedEvent): void {
10
+ this.tracker.addToTracker(event);
11
+ super.onPointerDown(event);
12
+ this.begin();
13
+ }
14
+
15
+ protected onPointerAdd(event: AdaptedEvent): void {
16
+ this.tracker.addToTracker(event);
17
+ super.onPointerAdd(event);
18
+ }
19
+
20
+ protected onPointerMove(event: AdaptedEvent): void {
21
+ this.tracker.track(event);
22
+ super.onPointerMove(event);
23
+ }
24
+
25
+ protected onPointerUp(event: AdaptedEvent): void {
26
+ super.onPointerUp(event);
27
+ this.tracker.removeFromTracker(event.pointerId);
28
+ }
29
+
30
+ protected onPointerRemove(event: AdaptedEvent): void {
31
+ super.onPointerRemove(event);
32
+ this.tracker.removeFromTracker(event.pointerId);
33
+ }
34
+
35
+ protected onPointerCancel(event: AdaptedEvent): void {
36
+ super.onPointerCancel(event);
37
+ this.reset();
38
+ }
39
+ }
@@ -1,24 +1,26 @@
1
1
  import { State } from '../../State';
2
- import { AdaptedPointerEvent } from '../interfaces';
2
+ import { DEFAULT_TOUCH_SLOP } from '../constants';
3
+ import { AdaptedEvent, Config } from '../interfaces';
3
4
 
4
5
  import GestureHandler from './GestureHandler';
5
6
  export default class NativeViewGestureHandler extends GestureHandler {
6
7
  private buttonRole!: boolean;
7
8
 
9
+ //TODO: Implement logic for activation on start
10
+ //@ts-ignore Logic yet to be implemented
11
+ private shouldActivateOnStart = false;
8
12
  private disallowInterruption = false;
9
13
 
14
+ private startX = 0;
15
+ private startY = 0;
16
+ private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
17
+
10
18
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
11
19
  super.init(ref, propsRef);
12
20
 
13
21
  this.setShouldCancelWhenOutside(true);
14
22
 
15
- if (!this.view) {
16
- return;
17
- }
18
-
19
23
  this.view.style['touchAction'] = 'auto';
20
- this.view.style['webkitUserSelect'] = 'auto';
21
- this.view.style['userSelect'] = 'auto';
22
24
 
23
25
  //@ts-ignore Turns on defualt touch behavior on Safari
24
26
  this.view.style['WebkitTouchCallout'] = 'auto';
@@ -28,44 +30,99 @@ export default class NativeViewGestureHandler extends GestureHandler {
28
30
  } else {
29
31
  this.buttonRole = false;
30
32
  }
33
+
34
+ if (this.view.tagName.toLowerCase() === 'input') {
35
+ //Enables text input on Safari
36
+ this.view.style['webkitUserSelect'] = 'auto';
37
+ }
38
+ }
39
+
40
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
41
+ super.updateGestureConfig({ enabled: enabled, ...props });
42
+
43
+ if (this.config.shouldActivateOnStart !== undefined) {
44
+ this.shouldActivateOnStart = this.config.shouldActivateOnStart;
45
+ }
46
+ if (this.config.disallowInterruption !== undefined) {
47
+ this.disallowInterruption = this.config.disallowInterruption;
48
+ }
31
49
  }
32
50
 
33
51
  protected resetConfig(): void {
34
52
  super.resetConfig();
35
53
  }
36
54
 
37
- protected onPointerDown(event: AdaptedPointerEvent): void {
55
+ protected onPointerDown(event: AdaptedEvent): void {
56
+ this.tracker.addToTracker(event);
38
57
  super.onPointerDown(event);
58
+ this.newPointerAction();
59
+ }
60
+
61
+ protected onPointerAdd(event: AdaptedEvent): void {
39
62
  this.tracker.addToTracker(event);
63
+ super.onPointerAdd(event);
64
+ this.newPointerAction();
65
+ }
40
66
 
41
- if (this.currentState === State.UNDETERMINED) {
42
- this.begin(event);
43
- if (this.buttonRole) {
44
- this.activate(event);
45
- }
67
+ private newPointerAction(): void {
68
+ this.startX = this.tracker.getLastAvgX();
69
+ this.startY = this.tracker.getLastAvgY();
70
+
71
+ if (this.currentState !== State.UNDETERMINED) {
72
+ return;
73
+ }
74
+
75
+ this.begin();
76
+ if (this.buttonRole) {
77
+ this.activate();
78
+ }
79
+ }
80
+
81
+ protected onPointerMove(event: AdaptedEvent): void {
82
+ this.tracker.track(event);
83
+
84
+ const dx = this.startX - this.tracker.getLastAvgX();
85
+ const dy = this.startY - this.tracker.getLastAvgY();
86
+ const distSq = dx * dx + dy * dy;
87
+
88
+ if (
89
+ !this.buttonRole &&
90
+ distSq >= this.minDistSq &&
91
+ this.currentState === State.BEGAN
92
+ ) {
93
+ this.activate();
46
94
  }
47
95
  }
48
96
 
49
- protected onPointerMove(_event: AdaptedPointerEvent): void {
50
- //
97
+ protected onPointerOut(): void {
98
+ this.cancel();
99
+ }
100
+
101
+ protected onPointerUp(event: AdaptedEvent): void {
102
+ super.onPointerUp(event);
103
+ this.onUp(event);
51
104
  }
52
105
 
53
- protected onPointerOut(event: AdaptedPointerEvent): void {
54
- this.cancel(event);
106
+ protected onPointerRemove(event: AdaptedEvent): void {
107
+ super.onPointerRemove(event);
108
+ this.onUp(event);
55
109
  }
56
110
 
57
- protected onPointerUp(event: AdaptedPointerEvent): void {
111
+ private onUp(event: AdaptedEvent): void {
58
112
  this.tracker.removeFromTracker(event.pointerId);
59
- if (!this.buttonRole) {
60
- this.activate(event);
61
- }
113
+
62
114
  if (this.tracker.getTrackedPointersCount() === 0) {
63
- this.end(event);
115
+ if (this.currentState === State.ACTIVE) {
116
+ this.end();
117
+ } else {
118
+ this.fail();
119
+ }
64
120
  }
65
121
  }
66
122
 
67
- protected onPointerCancel(event: AdaptedPointerEvent): void {
68
- this.cancel(event);
123
+ protected onPointerCancel(event: AdaptedEvent): void {
124
+ super.onPointerCancel(event);
125
+ this.cancel();
69
126
  this.reset();
70
127
  }
71
128
 
@@ -1,7 +1,7 @@
1
1
  import { PixelRatio } from 'react-native';
2
2
  import { State } from '../../State';
3
3
  import { DEFAULT_TOUCH_SLOP } from '../constants';
4
- import { AdaptedPointerEvent } from '../interfaces';
4
+ import { AdaptedEvent, Config } from '../interfaces';
5
5
 
6
6
  import GestureHandler from './GestureHandler';
7
7
 
@@ -42,8 +42,8 @@ export default class PanGestureHandler extends GestureHandler {
42
42
  private minVelocityY = Number.MAX_SAFE_INTEGER;
43
43
  private minVelocitySq = Number.MAX_SAFE_INTEGER;
44
44
 
45
- private minPointers = 1;
46
- private maxPointers = 10;
45
+ private minPointers = DEFAULT_MIN_POINTERS;
46
+ private maxPointers = DEFAULT_MAX_POINTERS;
47
47
 
48
48
  private startX = 0;
49
49
  private startY = 0;
@@ -52,14 +52,14 @@ export default class PanGestureHandler extends GestureHandler {
52
52
  private lastX = 0;
53
53
  private lastY = 0;
54
54
 
55
- // TODO: Implement logic required for activateAfterLongPress
56
55
  private activateAfterLongPress = 0;
56
+ private activationTimeout = 0;
57
57
 
58
58
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
59
59
  super.init(ref, propsRef);
60
60
  }
61
61
 
62
- public updateGestureConfig({ enabled = true, ...props }): void {
62
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
63
63
  this.resetConfig();
64
64
 
65
65
  super.updateGestureConfig({ enabled: enabled, ...props });
@@ -94,6 +94,10 @@ export default class PanGestureHandler extends GestureHandler {
94
94
  this.minVelocityY = this.config.minVelocityY;
95
95
  }
96
96
 
97
+ if (this.config.activateAfterLongPress !== undefined) {
98
+ this.activateAfterLongPress = this.config.activateAfterLongPress;
99
+ }
100
+
97
101
  if (this.config.shouldCancelWhenOutside) {
98
102
  this.setShouldCancelWhenOutside(false);
99
103
  }
@@ -188,22 +192,22 @@ export default class PanGestureHandler extends GestureHandler {
188
192
  this.activateAfterLongPress = 0;
189
193
  }
190
194
 
191
- protected transformNativeEvent(event: AdaptedPointerEvent) {
192
- if (!this.view) {
193
- return {};
194
- }
195
-
195
+ protected transformNativeEvent() {
196
+ const rect: DOMRect = this.view.getBoundingClientRect();
196
197
  const ratio = PixelRatio.get();
197
198
 
199
+ const translationX: number = this.getTranslationX();
200
+ const translationY: number = this.getTranslationY();
201
+
198
202
  return {
199
- translationX: this.getTranslationX(),
200
- translationY: this.getTranslationY(),
201
- absoluteX: event.x,
202
- absoluteY: event.y,
203
+ translationX: isNaN(translationX) ? 0 : translationX,
204
+ translationY: isNaN(translationY) ? 0 : translationY,
205
+ absoluteX: this.tracker.getLastAvgX(),
206
+ absoluteY: this.tracker.getLastAvgY(),
203
207
  velocityX: this.velocityX * ratio * 10,
204
208
  velocityY: this.velocityY * ratio * 10,
205
- x: event.offsetX,
206
- y: event.offsetY,
209
+ x: this.tracker.getLastAvgX() - rect.left,
210
+ y: this.tracker.getLastAvgY() - rect.top,
207
211
  };
208
212
  }
209
213
 
@@ -214,23 +218,25 @@ export default class PanGestureHandler extends GestureHandler {
214
218
  return this.lastY - this.startY + this.offsetY;
215
219
  }
216
220
 
221
+ private clearActivationTimeout(): void {
222
+ clearTimeout(this.activationTimeout);
223
+ }
224
+
217
225
  //EventsHandling
218
- protected onPointerDown(event: AdaptedPointerEvent): void {
219
- super.onPointerDown(event);
226
+ protected onPointerDown(event: AdaptedEvent): void {
220
227
  this.tracker.addToTracker(event);
221
-
222
- if (this.tracker.getTrackedPointersCount() > 1) {
223
- this.onPointerAdd(event);
224
- return;
225
- }
228
+ super.onPointerDown(event);
226
229
 
227
230
  this.lastX = this.tracker.getLastAvgX();
228
231
  this.lastY = this.tracker.getLastAvgY();
229
232
 
230
233
  this.tryBegin(event);
231
- this.checkBegan(event);
234
+ this.checkBegan();
232
235
  }
233
- protected onPointerAdd(event: AdaptedPointerEvent): void {
236
+
237
+ protected onPointerAdd(event: AdaptedEvent): void {
238
+ this.tracker.addToTracker(event);
239
+ super.onPointerAdd(event);
234
240
  this.tryBegin(event);
235
241
 
236
242
  this.offsetX += this.lastX - this.startX;
@@ -244,25 +250,18 @@ export default class PanGestureHandler extends GestureHandler {
244
250
 
245
251
  if (this.tracker.getTrackedPointersCount() > this.maxPointers) {
246
252
  if (this.currentState === State.ACTIVE) {
247
- this.cancel(event);
253
+ this.cancel();
248
254
  } else {
249
- this.fail(event);
255
+ this.fail();
250
256
  }
251
257
  } else {
252
- this.checkBegan(event);
258
+ this.checkBegan();
253
259
  }
254
260
  }
255
261
 
256
- protected onPointerUp(event: AdaptedPointerEvent): void {
262
+ protected onPointerUp(event: AdaptedEvent): void {
257
263
  super.onPointerUp(event);
258
264
 
259
- if (this.tracker.getTrackedPointersCount() > 1) {
260
- this.tracker.removeFromTracker(event.pointerId);
261
-
262
- this.onPointerRemove(event);
263
- return;
264
- }
265
-
266
265
  if (this.currentState === State.ACTIVE) {
267
266
  this.lastX = this.tracker.getLastAvgX();
268
267
  this.lastY = this.tracker.getLastAvgY();
@@ -271,13 +270,16 @@ export default class PanGestureHandler extends GestureHandler {
271
270
  this.tracker.removeFromTracker(event.pointerId);
272
271
 
273
272
  if (this.currentState === State.ACTIVE) {
274
- this.end(event);
273
+ this.end();
275
274
  } else {
276
275
  this.resetProgress();
277
- this.fail(event);
276
+ this.fail();
278
277
  }
279
278
  }
280
- protected onPointerRemove(event: AdaptedPointerEvent): void {
279
+ protected onPointerRemove(event: AdaptedEvent): void {
280
+ super.onPointerRemove(event);
281
+ this.tracker.removeFromTracker(event.pointerId);
282
+
281
283
  this.offsetX += this.lastX - this.startX;
282
284
  this.offsetY += this.lastY - this.startY;
283
285
 
@@ -293,11 +295,11 @@ export default class PanGestureHandler extends GestureHandler {
293
295
  this.tracker.getTrackedPointersCount() < this.minPointers
294
296
  )
295
297
  ) {
296
- this.checkBegan(event);
298
+ this.checkBegan();
297
299
  }
298
300
  }
299
301
 
300
- protected onPointerMove(event: AdaptedPointerEvent): void {
302
+ protected onPointerMove(event: AdaptedEvent): void {
301
303
  this.tracker.track(event);
302
304
 
303
305
  this.lastX = this.tracker.getLastAvgX();
@@ -305,17 +307,17 @@ export default class PanGestureHandler extends GestureHandler {
305
307
  this.velocityX = this.tracker.getVelocityX(event.pointerId);
306
308
  this.velocityY = this.tracker.getVelocityY(event.pointerId);
307
309
 
308
- this.checkBegan(event);
310
+ this.checkBegan();
309
311
 
310
312
  super.onPointerMove(event);
311
313
  }
312
314
 
313
- protected onPointerCancel(event: AdaptedPointerEvent): void {
315
+ protected onPointerCancel(event: AdaptedEvent): void {
314
316
  super.onPointerCancel(event);
315
317
 
316
318
  this.reset();
317
319
  }
318
- protected onPointerOutOfBounds(event: AdaptedPointerEvent): void {
320
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
319
321
  if (this.getShouldCancelWhenOutside()) {
320
322
  return;
321
323
  }
@@ -327,7 +329,7 @@ export default class PanGestureHandler extends GestureHandler {
327
329
  this.velocityX = this.tracker.getVelocityX(event.pointerId);
328
330
  this.velocityY = this.tracker.getVelocityY(event.pointerId);
329
331
 
330
- this.checkBegan(event);
332
+ this.checkBegan();
331
333
 
332
334
  if (this.currentState === State.ACTIVE) {
333
335
  super.onPointerOutOfBounds(event);
@@ -409,6 +411,7 @@ export default class PanGestureHandler extends GestureHandler {
409
411
  const distanceSq = dx * dx + dy * dy;
410
412
 
411
413
  if (this.activateAfterLongPress > 0 && distanceSq > DEFAULT_MIN_DIST_SQ) {
414
+ this.clearActivationTimeout();
412
415
  return true;
413
416
  }
414
417
 
@@ -439,7 +442,7 @@ export default class PanGestureHandler extends GestureHandler {
439
442
  );
440
443
  }
441
444
 
442
- private tryBegin(event: AdaptedPointerEvent): void {
445
+ private tryBegin(event: AdaptedEvent): void {
443
446
  if (
444
447
  this.currentState === State.UNDETERMINED &&
445
448
  this.tracker.getTrackedPointersCount() >= this.minPointers
@@ -450,31 +453,43 @@ export default class PanGestureHandler extends GestureHandler {
450
453
  this.velocityX = 0;
451
454
  this.velocityY = 0;
452
455
 
453
- this.begin(event);
456
+ this.begin();
454
457
 
455
- //Long press
458
+ if (this.activateAfterLongPress > 0) {
459
+ this.activationTimeout = setTimeout(() => {
460
+ this.activate();
461
+ }, this.activateAfterLongPress);
462
+ }
456
463
  } else {
457
464
  this.velocityX = this.tracker.getVelocityX(event.pointerId);
458
465
  this.velocityY = this.tracker.getVelocityY(event.pointerId);
459
466
  }
460
467
  }
461
468
 
462
- private checkBegan(event: AdaptedPointerEvent): void {
469
+ private checkBegan(): void {
463
470
  if (this.currentState === State.BEGAN) {
464
471
  if (this.shouldFail()) {
465
- this.fail(event);
472
+ this.fail();
466
473
  } else if (this.shouldActivate()) {
467
- this.activate(event);
474
+ this.activate();
468
475
  }
469
476
  }
470
477
  }
471
478
 
472
- protected activate(event: AdaptedPointerEvent, force = false): void {
479
+ public activate(force = false): void {
473
480
  if (this.currentState !== State.ACTIVE) {
474
481
  this.resetProgress();
475
482
  }
476
483
 
477
- super.activate(event, force);
484
+ super.activate(force);
485
+ }
486
+
487
+ protected onCancel(): void {
488
+ this.clearActivationTimeout();
489
+ }
490
+
491
+ protected onReset(): void {
492
+ this.clearActivationTimeout();
478
493
  }
479
494
 
480
495
  protected resetProgress(): void {