Skip to content

Commit 3918d8a

Browse files
m-bertCopilot
andauthored
[iOS] Add numberOfPointers to Native gesture events (#4023)
## Description `numberOfPointers` was not included in `Native` gesture events on `iOS`. This PR fixes this problem. I've also run `yarn format:apple` to fix formatting. ## Test plan Tested on expo-example (logging events from `RectButton` on main screen) --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent 0ec1cd2 commit 3918d8a

8 files changed

Lines changed: 67 additions & 23 deletions

File tree

packages/react-native-gesture-handler/apple/Handlers/RNHoverHandler.m

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,29 @@ - (void)mouseEntered:(NSEvent *)event
220220
{
221221
[self sendEventsInState:RNGestureHandlerStateBegan
222222
forViewWithTag:_view.reactTag
223-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
223+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
224+
withNumberOfTouches:1
225+
withPointerType:_pointerType]];
224226
[self sendEventsInState:RNGestureHandlerStateActive
225227
forViewWithTag:_view.reactTag
226-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
228+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
229+
withNumberOfTouches:1
230+
withPointerType:_pointerType]];
227231
}
228232

229233
- (void)mouseExited:(NSEvent *)theEvent
230234
{
231235
[self sendEventsInState:RNGestureHandlerStateEnd
232236
forViewWithTag:_view.reactTag
233-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
237+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
238+
withNumberOfTouches:1
239+
withPointerType:_pointerType]];
234240

235241
[self sendEventsInState:RNGestureHandlerStateUndetermined
236242
forViewWithTag:_view.reactTag
237-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
243+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
244+
withNumberOfTouches:1
245+
withPointerType:_pointerType]];
238246
}
239247

240248
@end

packages/react-native-gesture-handler/apple/Handlers/RNLongPressHandler.m

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ - (NSUInteger)getDuration;
3434

3535
#if !TARGET_OS_OSX
3636
- (void)handleGesture:(UIGestureRecognizer *)recognizer;
37-
- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange;
37+
- (void)handleGesture:(UIGestureRecognizer *)recognizer
38+
fromReset:(BOOL)fromReset
39+
fromManualStateChange:(BOOL)fromManualStateChange;
3840
#else
3941
- (void)handleGesture:(NSGestureRecognizer *)recognizer;
40-
- (void)handleGesture:(NSGestureRecognizer *)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange;
42+
- (void)handleGesture:(NSGestureRecognizer *)recognizer
43+
fromReset:(BOOL)fromReset
44+
fromManualStateChange:(BOOL)fromManualStateChange;
4145
#endif
4246

4347
@end
@@ -60,7 +64,9 @@ - (void)handleGesture:(UIGestureRecognizer *)recognizer
6064
[self handleGesture:recognizer fromReset:NO fromManualStateChange:NO];
6165
}
6266

63-
- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange
67+
- (void)handleGesture:(UIGestureRecognizer *)recognizer
68+
fromReset:(BOOL)fromReset
69+
fromManualStateChange:(BOOL)fromManualStateChange
6470
{
6571
previousTime = CACurrentMediaTime();
6672
[_gestureHandler handleGesture:recognizer fromReset:fromReset fromManualStateChange:fromManualStateChange];

packages/react-native-gesture-handler/apple/Handlers/RNNativeViewHandler.mm

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,21 +186,27 @@ - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
186186

187187
[self sendEventsInState:RNGestureHandlerStateActive
188188
forViewWithTag:sender.reactTag
189-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
189+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
190+
withNumberOfTouches:event.allTouches.count
191+
withPointerType:_pointerType]];
190192
}
191193

192194
- (void)handleTouchUpOutside:(UIView *)sender forEvent:(UIEvent *)event
193195
{
194196
[self sendEventsInState:RNGestureHandlerStateEnd
195197
forViewWithTag:sender.reactTag
196-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
198+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
199+
withNumberOfTouches:event.allTouches.count
200+
withPointerType:_pointerType]];
197201
}
198202

199203
- (void)handleTouchUpInside:(UIView *)sender forEvent:(UIEvent *)event
200204
{
201205
[self sendEventsInState:RNGestureHandlerStateEnd
202206
forViewWithTag:sender.reactTag
203-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
207+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
208+
withNumberOfTouches:event.allTouches.count
209+
withPointerType:_pointerType]];
204210
}
205211

206212
- (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
@@ -211,26 +217,34 @@ - (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
211217
[control cancelTrackingWithEvent:event];
212218
[self sendEventsInState:RNGestureHandlerStateEnd
213219
forViewWithTag:sender.reactTag
214-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
220+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
221+
withNumberOfTouches:event.allTouches.count
222+
withPointerType:_pointerType]];
215223
} else {
216224
[self sendEventsInState:RNGestureHandlerStateActive
217225
forViewWithTag:sender.reactTag
218-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
226+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
227+
withNumberOfTouches:event.allTouches.count
228+
withPointerType:_pointerType]];
219229
}
220230
}
221231

222232
- (void)handleDragEnter:(UIView *)sender forEvent:(UIEvent *)event
223233
{
224234
[self sendEventsInState:RNGestureHandlerStateActive
225235
forViewWithTag:sender.reactTag
226-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
236+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
237+
withNumberOfTouches:event.allTouches.count
238+
withPointerType:_pointerType]];
227239
}
228240

229241
- (void)handleTouchCancel:(UIView *)sender forEvent:(UIEvent *)event
230242
{
231243
[self sendEventsInState:RNGestureHandlerStateCancelled
232244
forViewWithTag:sender.reactTag
233-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
245+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
246+
withNumberOfTouches:event.allTouches.count
247+
withPointerType:_pointerType]];
234248
}
235249

236250
- (BOOL)wantsToAttachDirectlyToView
@@ -243,6 +257,7 @@ - (BOOL)wantsToAttachDirectlyToView
243257
- (RNGestureHandlerEventExtraData *)eventExtraData:(RNDummyGestureRecognizer *)recognizer
244258
{
245259
return [RNGestureHandlerEventExtraData forPointerInside:[self containsPointInView]
260+
withNumberOfTouches:1
246261
withPointerType:RNGestureHandlerMouse];
247262
}
248263

packages/react-native-gesture-handler/apple/Handlers/RNPinchHandler.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ - (void)handleGesture:(UIGestureRecognizer *)recognizer
4848
[self handleGesture:recognizer fromReset:NO fromManualStateChange:NO];
4949
}
5050

51-
- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange
51+
- (void)handleGesture:(UIGestureRecognizer *)recognizer
52+
fromReset:(BOOL)fromReset
53+
fromManualStateChange:(BOOL)fromManualStateChange
5254
{
5355
if (self.state == UIGestureRecognizerStateBegan) {
5456
#if TARGET_OS_OSX

packages/react-native-gesture-handler/apple/Handlers/RNRotationHandler.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ - (void)handleGesture:(UIGestureRecognizer *)recognizer
4646
[self handleGesture:recognizer fromReset:NO fromManualStateChange:NO];
4747
}
4848

49-
- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange
49+
- (void)handleGesture:(UIGestureRecognizer *)recognizer
50+
fromReset:(BOOL)fromReset
51+
fromManualStateChange:(BOOL)fromManualStateChange
5052
{
5153
if (self.state == UIGestureRecognizerStateBegan) {
5254
self.rotation = 0;

packages/react-native-gesture-handler/apple/RNGestureHandler.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,13 @@
9797
- (void)updateRelations:(nonnull NSDictionary *)relations;
9898
- (void)handleGesture:(nonnull id)recognizer;
9999
- (void)handleGesture:(nonnull id)recognizer fromReset:(BOOL)fromReset;
100-
- (void)handleGesture:(nonnull id)recognizer fromReset:(BOOL)fromReset fromManualStateChange:(BOOL)fromManualStateChange;
100+
- (void)handleGesture:(nonnull id)recognizer
101+
fromReset:(BOOL)fromReset
102+
fromManualStateChange:(BOOL)fromManualStateChange;
101103
- (void)handleGesture:(nonnull id)recognizer inState:(RNGestureHandlerState)state;
102-
- (void)handleGesture:(nonnull id)recognizer inState:(RNGestureHandlerState)state fromManualStateChange:(BOOL)fromManualStateChange;
104+
- (void)handleGesture:(nonnull id)recognizer
105+
inState:(RNGestureHandlerState)state
106+
fromManualStateChange:(BOOL)fromManualStateChange;
103107
- (BOOL)containsPointInView;
104108
- (RNGestureHandlerState)state;
105109
- (nullable RNGestureHandlerEventExtraData *)eventExtraData:(nonnull id)recognizer;
@@ -112,7 +116,7 @@
112116
- (void)sendEventsInState:(RNGestureHandlerState)state
113117
forViewWithTag:(nonnull NSNumber *)reactTag
114118
withExtraData:(nonnull RNGestureHandlerEventExtraData *)extraData
115-
fromManualStateChange:(BOOL)fromManualStateChange;
119+
fromManualStateChange:(BOOL)fromManualStateChange;
116120
- (void)sendEvent:(nonnull RNGestureHandlerStateChange *)event;
117121
- (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(nonnull NSNumber *)reactTag;
118122
- (nullable RNGHUIScrollView *)retrieveScrollView:(nonnull RNGHUIView *)view;

packages/react-native-gesture-handler/apple/RNGestureHandlerEvents.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@
5454
withAllPointers:(NSArray<NSDictionary *> *)allPointers
5555
withNumberOfTouches:(NSUInteger)numberOfTouches
5656
withPointerType:(NSInteger)pointerType;
57-
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside withPointerType:(NSInteger)pointerType;
57+
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside
58+
withNumberOfTouches:(NSUInteger)numberOfTouches
59+
withPointerType:(NSInteger)pointerType;
5860
@end
5961

6062
@interface RNGestureHandlerEvent : NSObject <RCTEvent>

packages/react-native-gesture-handler/apple/RNGestureHandlerEvents.mm

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,15 @@ + (RNGestureHandlerEventExtraData *)forEventType:(RNGHTouchEventType)eventType
156156
}];
157157
}
158158

159-
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside withPointerType:(NSInteger)pointerType
159+
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside
160+
withNumberOfTouches:(NSUInteger)numberOfTouches
161+
withPointerType:(NSInteger)pointerType
160162
{
161-
return [[RNGestureHandlerEventExtraData alloc]
162-
initWithData:@{@"pointerInside" : @(pointerInside), @"pointerType" : @(pointerType)}];
163+
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
164+
@"pointerInside" : @(pointerInside),
165+
@"numberOfPointers" : @(numberOfTouches),
166+
@"pointerType" : @(pointerType)
167+
}];
163168
}
164169

165170
@end

0 commit comments

Comments
 (0)