Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -577,11 +577,22 @@ open class GestureHandler {
onStateChange(newState, oldState)
}

fun wantsEvent(event: MotionEvent): Boolean = isEnabled &&
state != STATE_FAILED &&
state != STATE_CANCELLED &&
state != STATE_END &&
isTrackingPointer(event.getPointerId(event.actionIndex))
fun wantsEvent(event: MotionEvent): Boolean {
if (!isEnabled || state == STATE_FAILED || state == STATE_CANCELLED || state == STATE_END) {
return false
}

if (event.actionMasked == MotionEvent.ACTION_MOVE) {
for (i in 0 until event.pointerCount) {
if (isTrackingPointer(event.getPointerId(i))) {
return true
}
}
return false
} else {
return isTrackingPointer(event.getPointerId(event.actionIndex))
}
}

open fun shouldRequireToWaitForFailure(handler: GestureHandler): Boolean {
if (handler === this) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
fun dropRelationsForHandlerWithTag(handlerTag: Int) {
waitForRelations.remove(handlerTag)
simultaneousRelations.remove(handlerTag)
blockingRelations.remove(handlerTag)
}

private fun convertHandlerTagsArray(config: ReadableMap, key: String): IntArray {
Expand Down Expand Up @@ -64,6 +65,7 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController {
fun reset() {
waitForRelations.clear()
simultaneousRelations.clear()
blockingRelations.clear()
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ @implementation RNBetterSwipeGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
_lastPoint = CGPointZero;
_hasBegan = NO;
Expand All @@ -26,7 +26,7 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler

- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
[_gestureHandler reset];
[super touchesBegan:touches withEvent:event];
Expand Down Expand Up @@ -119,7 +119,7 @@ @implementation RNBetterSwipeGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:self action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;

maxDuration = 1.0;
Expand All @@ -132,9 +132,9 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
return self;
}

- (void)handleGesture:(NSPanGestureRecognizer *)gestureRecognizer fromReset:(BOOL)fromReset
- (void)handleGesture:(NSPanGestureRecognizer *)gestureRecognizer
{
[_gestureHandler handleGesture:self fromReset:fromReset];
[_gestureHandler handleGesture:self];
}

- (void)mouseDown:(NSEvent *)event
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ @implementation RNForceTouchGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
_force = defaultForce;
_minForce = defaultMinForce;
Expand All @@ -40,7 +40,7 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler

- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
if (_firstTouch) {
// ignore rest of fingers
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,22 @@ @implementation RNBetterHoverGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
_hoverEffect = RNGestureHandlerHoverEffectNone;
}
return self;
}

- (void)handleGesture:(UIHoverGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan) {
[_gestureHandler setCurrentPointerType:RNGestureHandlerMouse];
}

[_gestureHandler handleGesture:self];
}

- (void)triggerAction
{
[_gestureHandler handleGesture:self fromReset:NO];
Expand Down Expand Up @@ -153,11 +162,22 @@ - (void)configure:(NSDictionary *)config
#endif
}

- (void)setCurrentPointerType:(RNGestureHandlerPointerType)pointerType
{
_pointerType = pointerType;

if (@available(iOS 16.1, *)) {
if (((UIHoverGestureRecognizer *)self.recognizer).zOffset > 0.0) {
_pointerType = RNGestureHandlerStylus;
}
}
}

- (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
{
return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
withPointerType:UITouchTypePencil];
withPointerType:_pointerType];
}

@end
Expand All @@ -173,6 +193,7 @@ - (instancetype)initWithTag:(NSNumber *)tag
{
if ((self = [super initWithTag:tag])) {
_recognizer = [NSGestureRecognizer alloc];
_pointerType = RNGestureHandlerMouse;
}

return self;
Expand All @@ -199,21 +220,29 @@ - (void)mouseEntered:(NSEvent *)event
{
[self sendEventsInState:RNGestureHandlerStateBegan
forViewWithTag:_view.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
withNumberOfTouches:1
withPointerType:_pointerType]];
[self sendEventsInState:RNGestureHandlerStateActive
forViewWithTag:_view.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
withNumberOfTouches:1
withPointerType:_pointerType]];
}

- (void)mouseExited:(NSEvent *)theEvent
{
[self sendEventsInState:RNGestureHandlerStateEnd
forViewWithTag:_view.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:1
withPointerType:_pointerType]];

[self sendEventsInState:RNGestureHandlerStateUndetermined
forViewWithTag:_view.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:1
withPointerType:_pointerType]];
}

@end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
- (NSUInteger)getDuration;

#if !TARGET_OS_OSX
- (void)handleGesture:(UIGestureRecognizer *)recognizer;
- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset;
#else
- (void)handleGesture:(NSGestureRecognizer *)recognizer;
- (void)handleGesture:(NSGestureRecognizer *)recognizer fromReset:(BOOL)fromReset;
#endif

Expand All @@ -47,12 +49,18 @@ @implementation RNBetterLongPressGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:self action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
}
return self;
}

- (void)handleGesture:(UIGestureRecognizer *)recognizer
{
previousTime = CACurrentMediaTime();
[_gestureHandler handleGesture:recognizer fromReset:NO];
}

- (void)handleGesture:(UIGestureRecognizer *)recognizer fromReset:(BOOL)fromReset
{
previousTime = CACurrentMediaTime();
Expand All @@ -79,7 +87,7 @@ - (CGPoint)translationInView

- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
[super touchesBegan:touches withEvent:event];
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ @implementation RNManualRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
_shouldSendBeginEvent = YES;
}
Expand Down Expand Up @@ -59,7 +59,7 @@ - (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
#if !TARGET_OS_OSX
- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
[super touchesBegan:touches withEvent:event];

[self interactionsBegan:touches withEvent:event];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ @implementation RNDummyGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
}
return self;
Expand All @@ -38,7 +38,7 @@ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
#if !TARGET_OS_OSX
- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
}

Expand Down Expand Up @@ -166,7 +166,7 @@ - (void)bindToView:(UIView *)view

- (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
{
[self setCurrentPointerType:event];
[self setCurrentPointerTypeForEvent:event];
[self reset];

if (_disallowInterruption) {
Expand All @@ -182,21 +182,27 @@ - (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event

[self sendEventsInState:RNGestureHandlerStateActive
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}

- (void)handleTouchUpOutside:(UIView *)sender forEvent:(UIEvent *)event
{
[self sendEventsInState:RNGestureHandlerStateEnd
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}

- (void)handleTouchUpInside:(UIView *)sender forEvent:(UIEvent *)event
{
[self sendEventsInState:RNGestureHandlerStateEnd
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}

- (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
Expand All @@ -207,33 +213,42 @@ - (void)handleDragExit:(UIView *)sender forEvent:(UIEvent *)event
[control cancelTrackingWithEvent:event];
[self sendEventsInState:RNGestureHandlerStateEnd
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
} else {
[self sendEventsInState:RNGestureHandlerStateActive
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}
}

- (void)handleDragEnter:(UIView *)sender forEvent:(UIEvent *)event
{
[self sendEventsInState:RNGestureHandlerStateActive
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:YES
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}

- (void)handleTouchCancel:(UIView *)sender forEvent:(UIEvent *)event
{
[self sendEventsInState:RNGestureHandlerStateCancelled
forViewWithTag:sender.reactTag
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO withPointerType:_pointerType]];
withExtraData:[RNGestureHandlerEventExtraData forPointerInside:NO
withNumberOfTouches:event.allTouches.count
withPointerType:_pointerType]];
}

#else

- (RNGestureHandlerEventExtraData *)eventExtraData:(RNDummyGestureRecognizer *)recognizer
{
return [RNGestureHandlerEventExtraData forPointerInside:[self containsPointInView]
withNumberOfTouches:1
withPointerType:RNGestureHandlerMouse];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ @implementation RNBetterPanGestureRecognizer {

- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
{
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:fromReset:)])) {
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
_gestureHandler = gestureHandler;
_minDistSq = NAN;
_minVelocityX = NAN;
Expand Down Expand Up @@ -233,7 +233,7 @@ - (void)mouseUp:(NSEvent *)event

- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
{
[_gestureHandler setCurrentPointerType:event];
[_gestureHandler setCurrentPointerTypeForEvent:event];
// super call was moved to interactionsBegan method to keep the
// original order of calls
[self interactionsBegan:touches withEvent:event];
Expand Down
Loading
Loading