react-native-gesture-handler 2.15.0 → 2.16.0-rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. package/RNGestureHandler.podspec +2 -23
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +9 -4
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +4 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +69 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +25 -19
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +3 -2
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
  13. package/android/src/main/jni/cpp-adapter.cpp +18 -22
  14. package/apple/Handlers/RNFlingHandler.m +5 -4
  15. package/apple/Handlers/RNForceTouchHandler.m +3 -1
  16. package/apple/Handlers/RNHoverHandler.m +2 -1
  17. package/apple/Handlers/RNLongPressHandler.m +3 -1
  18. package/apple/Handlers/RNManualHandler.m +1 -0
  19. package/apple/Handlers/RNNativeViewHandler.mm +9 -7
  20. package/apple/Handlers/RNPanHandler.m +7 -2
  21. package/apple/Handlers/RNPinchHandler.m +38 -25
  22. package/apple/Handlers/RNRotationHandler.m +43 -29
  23. package/apple/Handlers/RNTapHandler.m +6 -4
  24. package/apple/RNGestureHandler.h +9 -0
  25. package/apple/RNGestureHandler.m +38 -3
  26. package/apple/RNGestureHandlerEvents.h +18 -9
  27. package/apple/RNGestureHandlerEvents.m +29 -11
  28. package/apple/RNGestureHandlerManager.h +5 -0
  29. package/apple/RNGestureHandlerManager.mm +32 -6
  30. package/apple/RNGestureHandlerModule.h +5 -3
  31. package/apple/RNGestureHandlerModule.mm +33 -19
  32. package/apple/RNGestureHandlerPointerType.h +8 -0
  33. package/lib/commonjs/PointerType.js +16 -0
  34. package/lib/commonjs/PointerType.js.map +1 -0
  35. package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
  36. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  37. package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
  38. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  39. package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
  40. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
  41. package/lib/commonjs/getShadowNodeFromRef.js +19 -2
  42. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  43. package/lib/commonjs/handlers/createHandler.js +5 -0
  44. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  45. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  46. package/lib/commonjs/index.js +8 -0
  47. package/lib/commonjs/index.js.map +1 -1
  48. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  49. package/lib/commonjs/web/handlers/GestureHandler.js +6 -3
  50. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/interfaces.js +3 -13
  52. package/lib/commonjs/web/interfaces.js.map +1 -1
  53. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +3 -3
  54. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  55. package/lib/commonjs/web/tools/PointerEventManager.js +29 -7
  56. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  57. package/lib/commonjs/web/tools/TouchEventManager.js +3 -1
  58. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  59. package/lib/commonjs/web/utils.js +6 -0
  60. package/lib/commonjs/web/utils.js.map +1 -1
  61. package/lib/module/PointerType.js +9 -0
  62. package/lib/module/PointerType.js.map +1 -0
  63. package/lib/module/components/GestureHandlerRootView.android.js +15 -2
  64. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  65. package/lib/module/components/GestureHandlerRootView.js +15 -3
  66. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  67. package/lib/module/components/GestureHandlerRootView.web.js +15 -3
  68. package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
  69. package/lib/module/getShadowNodeFromRef.js +19 -2
  70. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  71. package/lib/module/handlers/createHandler.js +6 -1
  72. package/lib/module/handlers/createHandler.js.map +1 -1
  73. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  74. package/lib/module/index.js +1 -0
  75. package/lib/module/index.js.map +1 -1
  76. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  77. package/lib/module/web/handlers/GestureHandler.js +5 -3
  78. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  79. package/lib/module/web/interfaces.js +2 -11
  80. package/lib/module/web/interfaces.js.map +1 -1
  81. package/lib/module/web/tools/GestureHandlerOrchestrator.js +2 -2
  82. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  83. package/lib/module/web/tools/PointerEventManager.js +30 -9
  84. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  85. package/lib/module/web/tools/TouchEventManager.js +2 -1
  86. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  87. package/lib/module/web/utils.js +2 -0
  88. package/lib/module/web/utils.js.map +1 -1
  89. package/lib/typescript/PointerType.d.ts +6 -0
  90. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
  91. package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
  92. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
  93. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
  94. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -0
  95. package/lib/typescript/index.d.ts +1 -0
  96. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
  97. package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -1
  98. package/lib/typescript/web/interfaces.d.ts +4 -8
  99. package/lib/typescript/web/utils.d.ts +2 -0
  100. package/package.json +1 -1
  101. package/src/PointerType.ts +6 -0
  102. package/src/components/GestureHandlerRootView.android.tsx +13 -5
  103. package/src/components/GestureHandlerRootView.tsx +10 -5
  104. package/src/components/GestureHandlerRootView.web.tsx +10 -5
  105. package/src/getShadowNodeFromRef.ts +28 -6
  106. package/src/handlers/createHandler.tsx +6 -0
  107. package/src/handlers/gestureHandlerCommon.ts +2 -0
  108. package/src/index.ts +1 -0
  109. package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
  110. package/src/web/handlers/GestureHandler.ts +3 -2
  111. package/src/web/interfaces.ts +4 -9
  112. package/src/web/tools/GestureHandlerOrchestrator.ts +2 -2
  113. package/src/web/tools/PointerEventManager.ts +34 -14
  114. package/src/web/tools/TouchEventManager.ts +2 -6
  115. package/src/web/utils.ts +9 -0
@@ -1,13 +1,13 @@
1
- import {
2
- AdaptedEvent,
3
- EventTypes,
4
- MouseButton,
5
- PointerType,
6
- } from '../interfaces';
1
+ import { AdaptedEvent, EventTypes, MouseButton } from '../interfaces';
7
2
  import EventManager from './EventManager';
8
- import { isPointerInBounds } from '../utils';
3
+ import { PointerTypeMapping, isPointerInBounds } from '../utils';
4
+ import { PointerType } from '../../PointerType';
9
5
 
10
6
  const POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);
7
+ const PointerTypes = {
8
+ Touch: 'touch',
9
+ Stylus: 'pen',
10
+ };
11
11
 
12
12
  export default class PointerEventManager extends EventManager<HTMLElement> {
13
13
  private trackedPointers = new Set<number>();
@@ -25,7 +25,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
25
25
 
26
26
  public setListeners(): void {
27
27
  this.view.addEventListener('pointerdown', (event: PointerEvent): void => {
28
- if (event.pointerType === PointerType.TOUCH) {
28
+ if (event.pointerType === PointerTypes.Touch) {
29
29
  return;
30
30
  }
31
31
  if (
@@ -53,7 +53,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
53
53
  });
54
54
 
55
55
  this.view.addEventListener('pointerup', (event: PointerEvent): void => {
56
- if (event.pointerType === PointerType.TOUCH) {
56
+ if (event.pointerType === PointerTypes.Touch) {
57
57
  return;
58
58
  }
59
59
 
@@ -83,8 +83,24 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
83
83
  }
84
84
  });
85
85
 
86
+ const lastPosition: { x: number | null; y: number | null } = {
87
+ x: null,
88
+ y: null,
89
+ };
90
+
86
91
  this.view.addEventListener('pointermove', (event: PointerEvent): void => {
87
- if (event.pointerType === PointerType.TOUCH) {
92
+ if (event.pointerType === PointerTypes.Touch) {
93
+ return;
94
+ }
95
+
96
+ // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
97
+ // it constantly sends events, even though there was no change in position. To fix that we check whether
98
+ // pointer has actually moved and if not, we do not send event.
99
+ if (
100
+ event.pointerType === PointerTypes.Stylus &&
101
+ event.x === lastPosition.x &&
102
+ event.y === lastPosition.y
103
+ ) {
88
104
  return;
89
105
  }
90
106
 
@@ -136,10 +152,13 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
136
152
  this.onPointerOutOfBounds(adaptedEvent);
137
153
  }
138
154
  }
155
+
156
+ lastPosition.x = event.x;
157
+ lastPosition.y = event.y;
139
158
  });
140
159
 
141
160
  this.view.addEventListener('pointercancel', (event: PointerEvent): void => {
142
- if (event.pointerType === PointerType.TOUCH) {
161
+ if (event.pointerType === PointerTypes.Touch) {
143
162
  return;
144
163
  }
145
164
 
@@ -160,7 +179,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
160
179
  // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
161
180
 
162
181
  this.view.addEventListener('pointerenter', (event: PointerEvent): void => {
163
- if (event.pointerType === PointerType.TOUCH) {
182
+ if (event.pointerType === PointerTypes.Touch) {
164
183
  return;
165
184
  }
166
185
 
@@ -170,7 +189,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
170
189
  });
171
190
 
172
191
  this.view.addEventListener('pointerleave', (event: PointerEvent): void => {
173
- if (event.pointerType === PointerType.TOUCH) {
192
+ if (event.pointerType === PointerTypes.Touch) {
174
193
  return;
175
194
  }
176
195
 
@@ -207,7 +226,8 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
207
226
  offsetY: event.offsetY,
208
227
  pointerId: event.pointerId,
209
228
  eventType: eventType,
210
- pointerType: event.pointerType as PointerType,
229
+ pointerType:
230
+ PointerTypeMapping.get(event.pointerType) ?? PointerType.OTHER,
211
231
  button: this.mouseButtonsMapper.get(event.button),
212
232
  time: event.timeStamp,
213
233
  };
@@ -1,11 +1,7 @@
1
- import {
2
- AdaptedEvent,
3
- EventTypes,
4
- PointerType,
5
- TouchEventType,
6
- } from '../interfaces';
1
+ import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
7
2
  import EventManager from './EventManager';
8
3
  import { isPointerInBounds } from '../utils';
4
+ import { PointerType } from '../../PointerType';
9
5
 
10
6
  export default class TouchEventManager extends EventManager<HTMLElement> {
11
7
  public setListeners(): void {
package/src/web/utils.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { PointerType } from '../PointerType';
2
+
1
3
  export function isPointerInBounds(
2
4
  view: HTMLElement,
3
5
  { x, y }: { x: number; y: number }
@@ -6,3 +8,10 @@ export function isPointerInBounds(
6
8
 
7
9
  return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
8
10
  }
11
+
12
+ export const PointerTypeMapping = new Map<string, PointerType>([
13
+ ['mouse', PointerType.MOUSE],
14
+ ['touch', PointerType.TOUCH],
15
+ ['pen', PointerType.STYLUS],
16
+ ['none', PointerType.OTHER],
17
+ ]);