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
@@ -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 {