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
@@ -39,6 +39,7 @@
39
39
 
40
40
  - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
41
41
  {
42
+ [_gestureHandler setCurrentPointerType:event];
42
43
  [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
43
44
  }
44
45
 
@@ -133,6 +134,7 @@
133
134
 
134
135
  - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
135
136
  {
137
+ [self setCurrentPointerType:event];
136
138
  [self reset];
137
139
 
138
140
  if (_disallowInterruption) {
@@ -148,21 +150,21 @@
148
150
 
149
151
  [self sendEventsInState:RNGestureHandlerStateActive
150
152
  forViewWithTag:sender.reactTag
151
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES]];
153
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
152
154
  }
153
155
 
154
156
  - (void)handleTouchUpOutside:(UIView *)sender forEvent:(UIEvent *)event
155
157
  {
156
158
  [self sendEventsInState:RNGestureHandlerStateEnd
157
159
  forViewWithTag:sender.reactTag
158
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO]];
160
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
159
161
  }
160
162
 
161
163
  - (void)handleTouchUpInside:(UIView *)sender forEvent:(UIEvent *)event
162
164
  {
163
165
  [self sendEventsInState:RNGestureHandlerStateEnd
164
166
  forViewWithTag:sender.reactTag
165
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES]];
167
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
166
168
  }
167
169
 
168
170
  - (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
@@ -173,11 +175,11 @@
173
175
  [control cancelTrackingWithEvent:event];
174
176
  [self sendEventsInState:RNGestureHandlerStateEnd
175
177
  forViewWithTag:sender.reactTag
176
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO]];
178
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
177
179
  } else {
178
180
  [self sendEventsInState:RNGestureHandlerStateActive
179
181
  forViewWithTag:sender.reactTag
180
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO]];
182
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
181
183
  }
182
184
  }
183
185
 
@@ -185,14 +187,14 @@
185
187
  {
186
188
  [self sendEventsInState:RNGestureHandlerStateActive
187
189
  forViewWithTag:sender.reactTag
188
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES]];
190
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
189
191
  }
190
192
 
191
193
  - (void)handleTouchCancel:(UIView *)sender forEvent:(UIEvent *)event
192
194
  {
193
195
  [self sendEventsInState:RNGestureHandlerStateCancelled
194
196
  forViewWithTag:sender.reactTag
195
- withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO]];
197
+ withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
196
198
  }
197
199
 
198
200
  @end
@@ -9,6 +9,7 @@
9
9
  #import "RNPanHandler.h"
10
10
 
11
11
  #if TARGET_OS_OSX
12
+
12
13
  @interface RNBetterPanGestureRecognizer : NSPanGestureRecognizer
13
14
  #else
14
15
  #import <UIKit/UIGestureRecognizerSubclass.h>
@@ -166,6 +167,7 @@
166
167
 
167
168
  - (void)mouseDown:(NSEvent *)event
168
169
  {
170
+ [_gestureHandler setCurrentPointerTypeToMouse];
169
171
  // super call was moved to interactionsBegan method to keep the
170
172
  // original order of calls
171
173
  [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
@@ -187,6 +189,7 @@
187
189
 
188
190
  - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
189
191
  {
192
+ [_gestureHandler setCurrentPointerType:event];
190
193
  // super call was moved to interactionsBegan method to keep the
191
194
  // original order of calls
192
195
  [self interactionsBegan:touches withEvent:event];
@@ -400,7 +403,8 @@
400
403
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window.contentView]
401
404
  withTranslation:[recognizer translationInView:recognizer.view.window.contentView]
402
405
  withVelocity:[recognizer velocityInView:recognizer.view.window.contentView]
403
- withNumberOfTouches:1];
406
+ withNumberOfTouches:1
407
+ withPointerType:RNGestureHandlerMouse];
404
408
  }
405
409
  #else
406
410
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPanGestureRecognizer *)recognizer
@@ -409,7 +413,8 @@
409
413
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
410
414
  withTranslation:[recognizer translationInView:recognizer.view.window]
411
415
  withVelocity:[recognizer velocityInView:recognizer.view.window]
412
- withNumberOfTouches:recognizer.numberOfTouches];
416
+ withNumberOfTouches:recognizer.numberOfTouches
417
+ withPointerType:_pointerType];
413
418
  }
414
419
  #endif
415
420
 
@@ -13,7 +13,12 @@
13
13
  #if !TARGET_OS_TV
14
14
 
15
15
  #if TARGET_OS_OSX
16
- @interface RNBetterPinchRecognizer : NSMagnificationGestureRecognizer
16
+ @interface RNBetterPinchRecognizer : NSMagnificationGestureRecognizer {
17
+ CGFloat prevMagnification;
18
+ NSTimeInterval prevTime;
19
+ }
20
+
21
+ @property (nonatomic, readonly) CGFloat velocity;
17
22
  #else
18
23
  @interface RNBetterPinchRecognizer : UIPinchGestureRecognizer
19
24
  #endif
@@ -31,6 +36,10 @@
31
36
  if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
32
37
  _gestureHandler = gestureHandler;
33
38
  }
39
+ #if TARGET_OS_OSX
40
+ prevMagnification = 0;
41
+ prevTime = 0;
42
+ #endif
34
43
  return self;
35
44
  }
36
45
 
@@ -67,32 +76,34 @@
67
76
  }
68
77
 
69
78
  #if TARGET_OS_OSX
70
- - (void)touchesBeganWithEvent:(NSEvent *)event
71
- {
72
- [super touchesBeganWithEvent:event];
73
- [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
74
- }
75
-
76
- - (void)touchesMovedWithEvent:(NSEvent *)event
77
- {
78
- [super touchesMovedWithEvent:event];
79
- [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
80
- }
81
-
82
- - (void)touchesEndedWithEvent:(NSEvent *)event
83
- {
84
- [super touchesEndedWithEvent:event];
85
- [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
86
- }
79
+ - (void)magnifyWithEvent:(NSEvent *)event
80
+ {
81
+ [super magnifyWithEvent:event];
82
+
83
+ switch (self.state) {
84
+ case NSGestureRecognizerStateBegan:
85
+ [_gestureHandler setCurrentPointerTypeToMouse];
86
+ [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
87
+ break;
88
+ case NSGestureRecognizerStateChanged:
89
+ [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
90
+ break;
91
+ case NSGestureRecognizerStateEnded:
92
+ [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
93
+ break;
94
+ case NSGestureRecognizerStateCancelled:
95
+ [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
96
+ break;
97
+ }
87
98
 
88
- - (void)touchesCancelledWithEvent:(NSEvent *)event
89
- {
90
- [super touchesCancelledWithEvent:event];
91
- [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
99
+ _velocity = (self.magnification - prevMagnification) / ((event.timestamp - prevTime) * 1000);
100
+ prevMagnification = self.magnification;
101
+ prevTime = event.timestamp;
92
102
  }
93
103
  #else
94
104
  - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
95
105
  {
106
+ [_gestureHandler setCurrentPointerType:event];
96
107
  [super touchesBegan:touches withEvent:event];
97
108
  [self interactionsBegan:touches withEvent:event];
98
109
  }
@@ -145,8 +156,9 @@
145
156
  {
146
157
  return [RNGestureHandlerEventExtraData forPinch:recognizer.magnification
147
158
  withFocalPoint:[recognizer locationInView:recognizer.view]
148
- withVelocity:1
149
- withNumberOfTouches:2];
159
+ withVelocity:((RNBetterPinchRecognizer *)recognizer).velocity
160
+ withNumberOfTouches:2
161
+ withPointerType:RNGestureHandlerMouse];
150
162
  }
151
163
  #else
152
164
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPinchGestureRecognizer *)recognizer
@@ -154,7 +166,8 @@
154
166
  return [RNGestureHandlerEventExtraData forPinch:recognizer.scale
155
167
  withFocalPoint:[recognizer locationInView:recognizer.view]
156
168
  withVelocity:recognizer.velocity
157
- withNumberOfTouches:recognizer.numberOfTouches];
169
+ withNumberOfTouches:recognizer.numberOfTouches
170
+ withPointerType:_pointerType];
158
171
  }
159
172
  #endif
160
173
  #endif // !TARGET_OS_TV
@@ -11,10 +11,16 @@
11
11
  #if !TARGET_OS_TV
12
12
 
13
13
  #if TARGET_OS_OSX
14
- @interface RNBetterRotationRecognizer : NSRotationGestureRecognizer
14
+ @interface RNBetterRotationRecognizer : NSRotationGestureRecognizer {
15
+ CGFloat prevRotation;
16
+ NSTimeInterval prevTime;
17
+ }
18
+
19
+ @property (nonatomic, readonly) CGFloat velocity;
15
20
  #else
16
21
  @interface RNBetterRotationRecognizer : UIRotationGestureRecognizer
17
22
  #endif
23
+
18
24
  - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
19
25
 
20
26
  @end
@@ -28,6 +34,10 @@
28
34
  if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
29
35
  _gestureHandler = gestureHandler;
30
36
  }
37
+ #if TARGET_OS_OSX
38
+ prevRotation = 0;
39
+ prevTime = 0;
40
+ #endif
31
41
  return self;
32
42
  }
33
43
 
@@ -60,52 +70,54 @@
60
70
  }
61
71
 
62
72
  #if TARGET_OS_OSX
63
- - (void)touchesBeganWithEvent:(NSEvent *)event
64
- {
65
- [super touchesBeganWithEvent:event];
66
- [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
67
- }
68
-
69
- - (void)touchesMovedWithEvent:(NSEvent *)event
70
- {
71
- [super touchesMovedWithEvent:event];
72
- [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
73
- }
74
-
75
- - (void)touchesEndedWithEvent:(NSEvent *)event
76
- {
77
- [super touchesEndedWithEvent:event];
78
- [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
79
- }
73
+ - (void)rotateWithEvent:(NSEvent *)event
74
+ {
75
+ [super rotateWithEvent:event];
76
+
77
+ switch (self.state) {
78
+ case NSGestureRecognizerStateBegan:
79
+ [_gestureHandler setCurrentPointerTypeToMouse];
80
+ [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
81
+ break;
82
+ case NSGestureRecognizerStateChanged:
83
+ [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
84
+ break;
85
+ case NSGestureRecognizerStateEnded:
86
+ [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
87
+ break;
88
+ case NSGestureRecognizerStateCancelled:
89
+ [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
90
+ break;
91
+ }
80
92
 
81
- - (void)touchesCancelledWithEvent:(NSEvent *)event
82
- {
83
- [super touchesCancelledWithEvent:event];
84
- [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
93
+ _velocity = (self.rotation - prevRotation) / ((event.timestamp - prevTime) * 1000);
94
+ prevRotation = self.rotation;
95
+ prevTime = event.timestamp;
85
96
  }
86
97
  #else
87
98
  - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
88
99
  {
100
+ [_gestureHandler setCurrentPointerType:event];
89
101
  [super touchesBegan:touches withEvent:event];
90
- [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
102
+ [self interactionsBegan:touches withEvent:event];
91
103
  }
92
104
 
93
105
  - (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
94
106
  {
95
107
  [super touchesMoved:touches withEvent:event];
96
- [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
108
+ [self interactionsMoved:touches withEvent:event];
97
109
  }
98
110
 
99
111
  - (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
100
112
  {
101
113
  [super touchesEnded:touches withEvent:event];
102
- [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
114
+ [self interactionsEnded:touches withEvent:event];
103
115
  }
104
116
 
105
117
  - (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
106
118
  {
107
119
  [super touchesCancelled:touches withEvent:event];
108
- [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
120
+ [self interactionsCancelled:touches withEvent:event];
109
121
  }
110
122
  #endif
111
123
 
@@ -138,8 +150,9 @@
138
150
  {
139
151
  return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation
140
152
  withAnchorPoint:[recognizer locationInView:recognizer.view]
141
- withVelocity:1
142
- withNumberOfTouches:2];
153
+ withVelocity:((RNBetterRotationRecognizer *)recognizer).velocity
154
+ withNumberOfTouches:2
155
+ withPointerType:RNGestureHandlerMouse];
143
156
  }
144
157
  #else
145
158
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIRotationGestureRecognizer *)recognizer
@@ -147,7 +160,8 @@
147
160
  return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation
148
161
  withAnchorPoint:[recognizer locationInView:recognizer.view]
149
162
  withVelocity:recognizer.velocity
150
- withNumberOfTouches:recognizer.numberOfTouches];
163
+ withNumberOfTouches:recognizer.numberOfTouches
164
+ withPointerType:_pointerType];
151
165
  }
152
166
  #endif
153
167
  #endif // !TARGET_OS_TV
@@ -147,6 +147,7 @@ static const NSTimeInterval defaultMaxDuration = 0.5;
147
147
  #if TARGET_OS_OSX
148
148
  - (void)mouseDown:(NSEvent *)event
149
149
  {
150
+ [_gestureHandler setCurrentPointerTypeToMouse];
150
151
  [super mouseDown:event];
151
152
  [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
152
153
  }
@@ -184,26 +185,27 @@ static const NSTimeInterval defaultMaxDuration = 0.5;
184
185
 
185
186
  - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
186
187
  {
188
+ [_gestureHandler setCurrentPointerType:event];
187
189
  [super touchesBegan:touches withEvent:event];
188
- [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
190
+ [self interactionsBegan:touches withEvent:event];
189
191
  }
190
192
 
191
193
  - (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
192
194
  {
193
195
  [super touchesMoved:touches withEvent:event];
194
- [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
196
+ [self interactionsMoved:touches withEvent:event];
195
197
  }
196
198
 
197
199
  - (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
198
200
  {
199
201
  [super touchesEnded:touches withEvent:event];
200
- [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
202
+ [self interactionsEnded:touches withEvent:event];
201
203
  }
202
204
 
203
205
  - (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
204
206
  {
205
207
  [super touchesCancelled:touches withEvent:event];
206
- [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
208
+ [self interactionsCancelled:touches withEvent:event];
207
209
  }
208
210
 
209
211
  #endif
@@ -3,6 +3,7 @@
3
3
  #import "RNGestureHandlerDirection.h"
4
4
  #import "RNGestureHandlerEvents.h"
5
5
  #import "RNGestureHandlerPointerTracker.h"
6
+ #import "RNGestureHandlerPointerType.h"
6
7
  #import "RNGestureHandlerState.h"
7
8
 
8
9
  #import <Foundation/Foundation.h>
@@ -53,6 +54,8 @@
53
54
  UIGestureRecognizer *_recognizer;
54
55
  @protected
55
56
  RNGestureHandlerState _lastState;
57
+ @protected
58
+ NSInteger _pointerType;
56
59
  }
57
60
 
58
61
  + (nullable RNGestureHandler *)findGestureHandlerByRecognizer:(nonnull UIGestureRecognizer *)recognizer;
@@ -87,4 +90,10 @@
87
90
  - (void)sendEvent:(nonnull RNGestureHandlerStateChange *)event;
88
91
  - (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(nonnull NSNumber *)reactTag;
89
92
 
93
+ #if !TARGET_OS_OSX
94
+ - (void)setCurrentPointerType:(nonnull UIEvent *)event;
95
+ #else
96
+ - (void)setCurrentPointerTypeToMouse;
97
+ #endif
98
+
90
99
  @end
@@ -176,6 +176,38 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
176
176
  self.recognizer.enabled = enabled;
177
177
  }
178
178
 
179
+ #if !TARGET_OS_OSX
180
+ - (void)setCurrentPointerType:(UIEvent *)event
181
+ {
182
+ UITouch *touch = [[event allTouches] anyObject];
183
+
184
+ switch (touch.type) {
185
+ case UITouchTypeDirect:
186
+ _pointerType = RNGestureHandlerTouch;
187
+ break;
188
+ case UITouchTypePencil:
189
+ _pointerType = RNGestureHandlerStylus;
190
+ break;
191
+ case UITouchTypeIndirectPointer:
192
+ _pointerType = RNGestureHandlerMouse;
193
+ break;
194
+ default:
195
+ _pointerType = RNGestureHandlerOtherPointer;
196
+ break;
197
+ }
198
+ }
199
+ #else
200
+ - (void)setCurrentPointerTypeToMouse
201
+ {
202
+ _pointerType = RNGestureHandlerMouse;
203
+ }
204
+ #endif
205
+
206
+ - (UITouchType)getPointerType
207
+ {
208
+ return _pointerType;
209
+ }
210
+
179
211
  - (void)bindToView:(RNGHUIView *)view
180
212
  {
181
213
  #if !TARGET_OS_OSX
@@ -200,11 +232,13 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
200
232
  #if TARGET_OS_OSX
201
233
  return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
202
234
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window.contentView]
203
- withNumberOfTouches:1];
235
+ withNumberOfTouches:1
236
+ withPointerType:RNGestureHandlerMouse];
204
237
  #else
205
238
  return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
206
239
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
207
- withNumberOfTouches:recognizer.numberOfTouches];
240
+ withNumberOfTouches:recognizer.numberOfTouches
241
+ withPointerType:_pointerType];
208
242
  #endif
209
243
  }
210
244
 
@@ -294,7 +328,8 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
294
328
  id extraData = [RNGestureHandlerEventExtraData forEventType:_pointerTracker.eventType
295
329
  withChangedPointers:_pointerTracker.changedPointersData
296
330
  withAllPointers:_pointerTracker.allPointersData
297
- withNumberOfTouches:_pointerTracker.trackedPointersCount];
331
+ withNumberOfTouches:_pointerTracker.trackedPointersCount
332
+ withPointerType:_pointerType];
298
333
  id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag
299
334
  handlerTag:_tag
300
335
  state:state
@@ -12,36 +12,45 @@
12
12
 
13
13
  - (instancetype)initWithData:(NSDictionary *)data;
14
14
 
15
- + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position withAbsolutePosition:(CGPoint)absolutePosition;
16
15
  + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
17
16
  withAbsolutePosition:(CGPoint)absolutePosition
18
- withNumberOfTouches:(NSUInteger)numberOfTouches;
17
+ withPointerType:(NSInteger)pointerType;
19
18
  + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
20
19
  withAbsolutePosition:(CGPoint)absolutePosition
21
20
  withNumberOfTouches:(NSUInteger)numberOfTouches
22
- withDuration:(NSUInteger)duration;
21
+ withPointerType:(NSInteger)pointerType;
22
+ + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
23
+ withAbsolutePosition:(CGPoint)absolutePosition
24
+ withNumberOfTouches:(NSUInteger)numberOfTouches
25
+ withDuration:(NSUInteger)duration
26
+ withPointerType:(NSInteger)pointerType;
23
27
  + (RNGestureHandlerEventExtraData *)forPan:(CGPoint)position
24
28
  withAbsolutePosition:(CGPoint)absolutePosition
25
29
  withTranslation:(CGPoint)translation
26
30
  withVelocity:(CGPoint)velocity
27
- withNumberOfTouches:(NSUInteger)numberOfTouches;
31
+ withNumberOfTouches:(NSUInteger)numberOfTouches
32
+ withPointerType:(NSInteger)pointerType;
28
33
  + (RNGestureHandlerEventExtraData *)forForce:(CGFloat)force
29
34
  forPosition:(CGPoint)position
30
35
  withAbsolutePosition:(CGPoint)absolutePosition
31
- withNumberOfTouches:(NSUInteger)numberOfTouches;
36
+ withNumberOfTouches:(NSUInteger)numberOfTouches
37
+ withPointerType:(NSInteger)pointerType;
32
38
  + (RNGestureHandlerEventExtraData *)forPinch:(CGFloat)scale
33
39
  withFocalPoint:(CGPoint)focalPoint
34
40
  withVelocity:(CGFloat)velocity
35
- withNumberOfTouches:(NSUInteger)numberOfTouches;
41
+ withNumberOfTouches:(NSUInteger)numberOfTouches
42
+ withPointerType:(NSInteger)pointerType;
36
43
  + (RNGestureHandlerEventExtraData *)forRotation:(CGFloat)rotation
37
44
  withAnchorPoint:(CGPoint)anchorPoint
38
45
  withVelocity:(CGFloat)velocity
39
- withNumberOfTouches:(NSUInteger)numberOfTouches;
46
+ withNumberOfTouches:(NSUInteger)numberOfTouches
47
+ withPointerType:(NSInteger)pointerType;
40
48
  + (RNGestureHandlerEventExtraData *)forEventType:(RNGHTouchEventType)eventType
41
49
  withChangedPointers:(NSArray<NSDictionary *> *)changedPointers
42
50
  withAllPointers:(NSArray<NSDictionary *> *)allPointers
43
- withNumberOfTouches:(NSUInteger)numberOfTouches;
44
- + (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside;
51
+ withNumberOfTouches:(NSUInteger)numberOfTouches
52
+ withPointerType:(NSInteger)pointerType;
53
+ + (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside withPointerType:(NSInteger)pointerType;
45
54
  @end
46
55
 
47
56
  @interface RNGestureHandlerEvent : NSObject <RCTEvent>