Skip to content

Commit e7e8506

Browse files
m-bertCopilot
andcommitted
[iOS] Add numberOfPointers to Native gesture events (#4023)
`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. 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 11309e0 commit e7e8506

4 files changed

Lines changed: 45 additions & 15 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/RNNativeViewHandler.mm

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

183183
[self sendEventsInState:RNGestureHandlerStateActive
184184
forViewWithTag:sender.reactTag
185-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
185+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
186+
withNumberOfTouches:event.allTouches.count
187+
withPointerType:_pointerType]];
186188
}
187189

188190
- (void)handleTouchUpOutside:(UIView *)sender forEvent:(UIEvent *)event
189191
{
190192
[self sendEventsInState:RNGestureHandlerStateEnd
191193
forViewWithTag:sender.reactTag
192-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
194+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
195+
withNumberOfTouches:event.allTouches.count
196+
withPointerType:_pointerType]];
193197
}
194198

195199
- (void)handleTouchUpInside:(UIView *)sender forEvent:(UIEvent *)event
196200
{
197201
[self sendEventsInState:RNGestureHandlerStateEnd
198202
forViewWithTag:sender.reactTag
199-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
203+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
204+
withNumberOfTouches:event.allTouches.count
205+
withPointerType:_pointerType]];
200206
}
201207

202208
- (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
@@ -207,33 +213,42 @@ - (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
207213
[control cancelTrackingWithEvent:event];
208214
[self sendEventsInState:RNGestureHandlerStateEnd
209215
forViewWithTag:sender.reactTag
210-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
216+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
217+
withNumberOfTouches:event.allTouches.count
218+
withPointerType:_pointerType]];
211219
} else {
212220
[self sendEventsInState:RNGestureHandlerStateActive
213221
forViewWithTag:sender.reactTag
214-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
222+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
223+
withNumberOfTouches:event.allTouches.count
224+
withPointerType:_pointerType]];
215225
}
216226
}
217227

218228
- (void)handleDragEnter:(UIView *)sender forEvent:(UIEvent *)event
219229
{
220230
[self sendEventsInState:RNGestureHandlerStateActive
221231
forViewWithTag:sender.reactTag
222-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
232+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
233+
withNumberOfTouches:event.allTouches.count
234+
withPointerType:_pointerType]];
223235
}
224236

225237
- (void)handleTouchCancel:(UIView *)sender forEvent:(UIEvent *)event
226238
{
227239
[self sendEventsInState:RNGestureHandlerStateCancelled
228240
forViewWithTag:sender.reactTag
229-
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
241+
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
242+
withNumberOfTouches:event.allTouches.count
243+
withPointerType:_pointerType]];
230244
}
231245

232246
#else
233247

234248
- (RNGestureHandlerEventExtraData *)eventExtraData:(RNDummyGestureRecognizer *)recognizer
235249
{
236250
return [RNGestureHandlerEventExtraData forPointerInside:[self containsPointInView]
251+
withNumberOfTouches:1
237252
withPointerType:RNGestureHandlerMouse];
238253
}
239254

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@
5252
withAllPointers:(NSArray<NSDictionary *> *)allPointers
5353
withNumberOfTouches:(NSUInteger)numberOfTouches
5454
withPointerType:(NSInteger)pointerType;
55-
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside withPointerType:(NSInteger)pointerType;
55+
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside
56+
withNumberOfTouches:(NSUInteger)numberOfTouches
57+
withPointerType:(NSInteger)pointerType;
5658
@end
5759

5860
@interface RNGestureHandlerEvent : NSObject <RCTEvent>

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

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)