react-native-gesture-handler 2.4.2 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +3 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +6 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +103 -22
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +29 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +4 -0
- package/android/src/main/jni/Android.mk +1 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
- package/ios/Handlers/RNFlingHandler.m +43 -1
- package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
- package/ios/Handlers/RNPanHandler.m +27 -0
- package/ios/RNGestureHandler.h +1 -0
- package/ios/RNGestureHandler.m +22 -4
- package/ios/RNGestureHandlerManager.mm +10 -2
- package/ios/RNGestureHandlerModule.mm +4 -1
- package/ios/RNManualActivationRecognizer.m +10 -3
- package/ios/RNRootViewGestureRecognizer.m +12 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js +81 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +4 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +6 -3
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/utils.js +6 -3
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +57 -0
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +4 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +1 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.js +3 -0
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
- package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/module/handlers/createHandler.js +6 -4
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js +5 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/utils.js +2 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +34 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/components/GestureButtons.d.ts +6 -0
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
- package/lib/typescript/web/NodeManager.d.ts +2 -2
- package/package.json +1 -1
- package/src/RNGestureHandlerModule.macos.ts +62 -0
- package/src/components/GestureButtons.tsx +7 -0
- package/src/components/touchables/GenericTouchable.tsx +1 -0
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
- package/src/handlers/PanGestureHandler.ts +2 -0
- package/src/handlers/PressabilityDebugView.tsx +2 -0
- package/src/handlers/PressabilityDebugView.web.tsx +4 -0
- package/src/handlers/{createHandler.ts → createHandler.tsx} +7 -6
- package/src/handlers/gestures/gestureStateManager.ts +13 -8
- package/src/handlers/gestures/panGesture.ts +5 -0
- package/src/utils.ts +3 -1
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -1,11 +1,11 @@
|
|
1
1
|
/**
|
2
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
3
|
-
*
|
4
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
5
|
-
* once the code is regenerated.
|
6
|
-
*
|
7
|
-
* @generated by codegen project: GeneratePropsJavaDelegate.js
|
8
|
-
*/
|
2
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
3
|
+
*
|
4
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
5
|
+
* once the code is regenerated.
|
6
|
+
*
|
7
|
+
* @generated by codegen project: GeneratePropsJavaDelegate.js
|
8
|
+
*/
|
9
9
|
|
10
10
|
package com.facebook.react.viewmanagers;
|
11
11
|
|
@@ -23,7 +23,7 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
|
|
23
23
|
public void setProperty(T view, String propName, @Nullable Object value) {
|
24
24
|
switch (propName) {
|
25
25
|
case "exclusive":
|
26
|
-
mViewManager.setExclusive(view, value == null ?
|
26
|
+
mViewManager.setExclusive(view, value == null ? true : (boolean) value);
|
27
27
|
break;
|
28
28
|
case "foreground":
|
29
29
|
mViewManager.setForeground(view, value == null ? false : (boolean) value);
|
@@ -32,7 +32,7 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
|
|
32
32
|
mViewManager.setBorderless(view, value == null ? false : (boolean) value);
|
33
33
|
break;
|
34
34
|
case "enabled":
|
35
|
-
mViewManager.setEnabled(view, value == null ?
|
35
|
+
mViewManager.setEnabled(view, value == null ? true : (boolean) value);
|
36
36
|
break;
|
37
37
|
case "rippleColor":
|
38
38
|
mViewManager.setRippleColor(view, ColorPropConverter.getColor(value, view.getContext()));
|
@@ -40,6 +40,9 @@ public class RNGestureHandlerButtonManagerDelegate<T extends View, U extends Bas
|
|
40
40
|
case "rippleRadius":
|
41
41
|
mViewManager.setRippleRadius(view, value == null ? 0 : ((Double) value).intValue());
|
42
42
|
break;
|
43
|
+
case "touchSoundDisabled":
|
44
|
+
mViewManager.setTouchSoundDisabled(view, value == null ? false : (boolean) value);
|
45
|
+
break;
|
43
46
|
default:
|
44
47
|
super.setProperty(view, propName, value);
|
45
48
|
}
|
@@ -19,4 +19,5 @@ public interface RNGestureHandlerButtonManagerInterface<T extends View> {
|
|
19
19
|
void setEnabled(T view, boolean value);
|
20
20
|
void setRippleColor(T view, @Nullable Integer value);
|
21
21
|
void setRippleRadius(T view, int value);
|
22
|
+
void setTouchSoundDisabled(T view, boolean value);
|
22
23
|
}
|
@@ -8,38 +8,54 @@
|
|
8
8
|
|
9
9
|
@implementation RNBetterSwipeGestureRecognizer {
|
10
10
|
__weak RNGestureHandler* _gestureHandler;
|
11
|
+
CGPoint _lastPoint; // location of the most recently updated touch, relative to the view
|
12
|
+
bool _hasBegan; // whether the `BEGAN` event has been sent
|
11
13
|
}
|
12
14
|
|
13
15
|
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
|
14
16
|
{
|
15
17
|
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
|
16
18
|
_gestureHandler = gestureHandler;
|
19
|
+
_lastPoint = CGPointZero;
|
20
|
+
_hasBegan = NO;
|
17
21
|
}
|
18
22
|
return self;
|
19
23
|
}
|
20
24
|
|
21
25
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
22
26
|
{
|
27
|
+
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
|
23
28
|
[_gestureHandler reset];
|
24
|
-
[self triggerAction];
|
25
29
|
[super touchesBegan:touches withEvent:event];
|
30
|
+
|
31
|
+
// self.numberOfTouches doesn't work for this because in case than one finger is required,
|
32
|
+
// when holding one finger on the screen and tapping with the second one, numberOfTouches is equal
|
33
|
+
// to 2 only for the first tap but 1 for all the following ones
|
34
|
+
if (!_hasBegan) {
|
35
|
+
[self triggerAction];
|
36
|
+
_hasBegan = YES;
|
37
|
+
}
|
38
|
+
|
26
39
|
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
27
40
|
}
|
28
41
|
|
29
42
|
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
30
43
|
{
|
44
|
+
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
|
31
45
|
[super touchesMoved:touches withEvent:event];
|
32
46
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
33
47
|
}
|
34
48
|
|
35
49
|
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
36
50
|
{
|
51
|
+
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
|
37
52
|
[super touchesEnded:touches withEvent:event];
|
38
53
|
[_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
|
39
54
|
}
|
40
55
|
|
41
56
|
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
42
57
|
{
|
58
|
+
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
|
43
59
|
[super touchesCancelled:touches withEvent:event];
|
44
60
|
[_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
|
45
61
|
}
|
@@ -53,9 +69,17 @@
|
|
53
69
|
{
|
54
70
|
[self triggerAction];
|
55
71
|
[_gestureHandler.pointerTracker reset];
|
72
|
+
_hasBegan = NO;
|
56
73
|
[super reset];
|
57
74
|
}
|
58
75
|
|
76
|
+
- (CGPoint)getLastLocation {
|
77
|
+
// I think keeping the location of only one touch is enough since it would be used to determine the direction
|
78
|
+
// of the movement, and if it's wrong the recognizer fails anyway.
|
79
|
+
// In case the location of all touches is required, touch events are the way to go
|
80
|
+
return _lastPoint;
|
81
|
+
}
|
82
|
+
|
59
83
|
@end
|
60
84
|
|
61
85
|
@implementation RNFlingGestureHandler
|
@@ -104,5 +128,23 @@
|
|
104
128
|
return shouldBegin;
|
105
129
|
}
|
106
130
|
|
131
|
+
- (RNGestureHandlerEventExtraData *)eventExtraData:(id)_recognizer
|
132
|
+
{
|
133
|
+
// For some weird reason [recognizer locationInView:recognizer.view.window] returns (0, 0).
|
134
|
+
// To calculate the correct absolute position, first calculate the absolute position of the
|
135
|
+
// view inside the root view controller (https://stackoverflow.com/a/7448573) and then
|
136
|
+
// add the relative touch position to it.
|
137
|
+
|
138
|
+
RNBetterSwipeGestureRecognizer *recognizer = (RNBetterSwipeGestureRecognizer *)_recognizer;
|
139
|
+
|
140
|
+
CGPoint viewAbsolutePosition = [recognizer.view convertPoint:recognizer.view.bounds.origin toView:[UIApplication sharedApplication].keyWindow.rootViewController.view];
|
141
|
+
CGPoint locationInView = [recognizer getLastLocation];
|
142
|
+
|
143
|
+
return [RNGestureHandlerEventExtraData
|
144
|
+
forPosition:locationInView
|
145
|
+
withAbsolutePosition:CGPointMake(viewAbsolutePosition.x + locationInView.x, viewAbsolutePosition.y + locationInView.y)
|
146
|
+
withNumberOfTouches:recognizer.numberOfTouches];
|
147
|
+
}
|
148
|
+
|
107
149
|
@end
|
108
150
|
|
@@ -11,9 +11,14 @@
|
|
11
11
|
#import <UIKit/UIGestureRecognizerSubclass.h>
|
12
12
|
|
13
13
|
#import <React/RCTConvert.h>
|
14
|
-
#import <React/RCTScrollView.h>
|
15
14
|
#import <React/UIView+React.h>
|
16
15
|
|
16
|
+
#ifdef RN_FABRIC_ENABLED
|
17
|
+
#import <React/RCTScrollViewComponentView.h>
|
18
|
+
#else
|
19
|
+
#import <React/RCTScrollView.h>
|
20
|
+
#endif // RN_FABRIC_ENABLED
|
21
|
+
|
17
22
|
#pragma mark RNDummyGestureRecognizer
|
18
23
|
|
19
24
|
@implementation RNDummyGestureRecognizer {
|
@@ -101,6 +106,12 @@
|
|
101
106
|
// We can restore default scrollview behaviour to delay touches to scrollview's children
|
102
107
|
// because gesture handler system can handle cancellation of scroll recognizer when JS responder
|
103
108
|
// is set
|
109
|
+
#ifdef RN_FABRIC_ENABLED
|
110
|
+
if ([view isKindOfClass:[RCTScrollViewComponentView class]]) {
|
111
|
+
UIScrollView *scrollView = ((RCTScrollViewComponentView *)view).scrollView;
|
112
|
+
scrollView.delaysContentTouches = YES;
|
113
|
+
}
|
114
|
+
#else
|
104
115
|
if ([view isKindOfClass:[RCTScrollView class]]) {
|
105
116
|
// This part of the code is coupled with RN implementation of ScrollView native wrapper and
|
106
117
|
// we expect for RCTScrollView component to contain a subclass of UIScrollview as the only
|
@@ -108,6 +119,7 @@
|
|
108
119
|
UIScrollView *scrollView = [view.subviews objectAtIndex:0];
|
109
120
|
scrollView.delaysContentTouches = YES;
|
110
121
|
}
|
122
|
+
#endif // RN_FABRIC_ENABLED
|
111
123
|
}
|
112
124
|
|
113
125
|
- (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
|
@@ -24,6 +24,7 @@
|
|
24
24
|
@property (nonatomic) CGFloat activeOffsetYEnd;
|
25
25
|
@property (nonatomic) CGFloat failOffsetYStart;
|
26
26
|
@property (nonatomic) CGFloat failOffsetYEnd;
|
27
|
+
@property (nonatomic) CGFloat activateAfterLongPress;
|
27
28
|
|
28
29
|
|
29
30
|
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
@@ -53,6 +54,7 @@
|
|
53
54
|
_activeOffsetYEnd = NAN;
|
54
55
|
_failOffsetYStart = NAN;
|
55
56
|
_failOffsetYEnd = NAN;
|
57
|
+
_activateAfterLongPress = NAN;
|
56
58
|
_hasCustomActivationCriteria = NO;
|
57
59
|
#if !TARGET_OS_TV
|
58
60
|
_realMinimumNumberOfTouches = self.minimumNumberOfTouches;
|
@@ -71,6 +73,13 @@
|
|
71
73
|
_realMinimumNumberOfTouches = minimumNumberOfTouches;
|
72
74
|
}
|
73
75
|
|
76
|
+
- (void)activateAfterLongPress
|
77
|
+
{
|
78
|
+
self.state = UIGestureRecognizerStateBegan;
|
79
|
+
// Send event in ACTIVE state because UIGestureRecognizerStateBegan is mapped to RNGestureHandlerStateBegan
|
80
|
+
[_gestureHandler handleGesture:self inState:RNGestureHandlerStateActive];
|
81
|
+
}
|
82
|
+
|
74
83
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
75
84
|
{
|
76
85
|
if ([self numberOfTouches] == 0) {
|
@@ -89,6 +98,10 @@
|
|
89
98
|
[super touchesBegan:touches withEvent:event];
|
90
99
|
[self triggerAction];
|
91
100
|
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
101
|
+
|
102
|
+
if (!isnan(_activateAfterLongPress)) {
|
103
|
+
[self performSelector:@selector(activateAfterLongPress) withObject:nil afterDelay:_activateAfterLongPress];
|
104
|
+
}
|
92
105
|
}
|
93
106
|
|
94
107
|
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
@@ -140,6 +153,7 @@
|
|
140
153
|
{
|
141
154
|
[self triggerAction];
|
142
155
|
[_gestureHandler.pointerTracker reset];
|
156
|
+
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
|
143
157
|
self.enabled = YES;
|
144
158
|
[super reset];
|
145
159
|
}
|
@@ -155,6 +169,12 @@
|
|
155
169
|
- (BOOL)shouldFailUnderCustomCriteria
|
156
170
|
{
|
157
171
|
CGPoint trans = [self translationInView:self.view.window];
|
172
|
+
// Apple docs say that 10 units is the default allowable movement for UILongPressGestureRecognizer
|
173
|
+
if (!isnan(_activateAfterLongPress) && trans.x * trans.x + trans.y * trans.y > 100) {
|
174
|
+
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
|
175
|
+
return YES;
|
176
|
+
}
|
177
|
+
|
158
178
|
if (!isnan(_failOffsetXStart) && trans.x < _failOffsetXStart) {
|
159
179
|
return YES;
|
160
180
|
}
|
@@ -242,6 +262,7 @@
|
|
242
262
|
#endif
|
243
263
|
recognizer.minDistSq = NAN;
|
244
264
|
recognizer.minVelocitySq = NAN;
|
265
|
+
recognizer.activateAfterLongPress = NAN;
|
245
266
|
}
|
246
267
|
|
247
268
|
- (void)configure:(NSDictionary *)config
|
@@ -283,6 +304,12 @@
|
|
283
304
|
CGFloat velocity = [RCTConvert CGFloat:prop];
|
284
305
|
recognizer.minVelocitySq = velocity * velocity;
|
285
306
|
}
|
307
|
+
|
308
|
+
prop = config[@"activateAfterLongPress"];
|
309
|
+
if (prop != nil) {
|
310
|
+
recognizer.activateAfterLongPress = [RCTConvert CGFloat:prop] / 1000.0;
|
311
|
+
recognizer.minDistSq = MAX(100, recognizer.minDistSq);
|
312
|
+
}
|
286
313
|
[recognizer updateHasCustomActivationCriteria];
|
287
314
|
}
|
288
315
|
|
package/ios/RNGestureHandler.h
CHANGED
@@ -65,6 +65,7 @@ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\
|
|
65
65
|
- (void)resetConfig NS_REQUIRES_SUPER;
|
66
66
|
- (void)configure:(nullable NSDictionary *)config NS_REQUIRES_SUPER;
|
67
67
|
- (void)handleGesture:(nonnull id)recognizer;
|
68
|
+
- (void)handleGesture:(nonnull id)recognizer inState:(RNGestureHandlerState)state;
|
68
69
|
- (BOOL)containsPointInView;
|
69
70
|
- (RNGestureHandlerState)state;
|
70
71
|
- (nullable RNGestureHandlerEventExtraData *)eventExtraData:(nonnull id)recognizer;
|
package/ios/RNGestureHandler.m
CHANGED
@@ -203,6 +203,12 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
203
203
|
}
|
204
204
|
|
205
205
|
_state = [self recognizerState];
|
206
|
+
[self handleGesture:recognizer inState:_state];
|
207
|
+
}
|
208
|
+
|
209
|
+
- (void)handleGesture:(UIGestureRecognizer *)recognizer inState:(RNGestureHandlerState)state
|
210
|
+
{
|
211
|
+
_state = state;
|
206
212
|
RNGestureHandlerEventExtraData *eventData = [self eventExtraData:recognizer];
|
207
213
|
[self sendEventsInState:self.state forViewWithTag:recognizer.view.reactTag withExtraData:eventData];
|
208
214
|
}
|
@@ -212,6 +218,11 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
212
218
|
withExtraData:(RNGestureHandlerEventExtraData *)extraData
|
213
219
|
{
|
214
220
|
if (state != _lastState) {
|
221
|
+
// don't send change events from END to FAILED or CANCELLED, this may happen when gesture is ended in `onTouchesUp` callback
|
222
|
+
if (_lastState == RNGestureHandlerStateEnd && (state == RNGestureHandlerStateFailed || state == RNGestureHandlerStateCancelled)) {
|
223
|
+
return;
|
224
|
+
}
|
225
|
+
|
215
226
|
if (state == RNGestureHandlerStateActive) {
|
216
227
|
// Generate a unique coalescing-key each time the gesture-handler becomes active. All events will have
|
217
228
|
// the same coalescing-key allowing RCTEventDispatcher to coalesce RNGestureHandlerEvents when events are
|
@@ -219,7 +230,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
219
230
|
static uint16_t nextEventCoalescingKey = 0;
|
220
231
|
self->_eventCoalescingKey = nextEventCoalescingKey++;
|
221
232
|
|
222
|
-
} else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive) {
|
233
|
+
} else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive && !_manualActivation) {
|
223
234
|
id event = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
|
224
235
|
handlerTag:_tag
|
225
236
|
state:RNGestureHandlerStateActive
|
@@ -390,14 +401,21 @@ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherG
|
|
390
401
|
if (_recognizer.state == UIGestureRecognizerStateBegan && _recognizer.state == UIGestureRecognizerStatePossible) {
|
391
402
|
return YES;
|
392
403
|
}
|
393
|
-
|
394
|
-
|
395
|
-
|
404
|
+
|
405
|
+
RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
|
406
|
+
if (handler != nil) {
|
407
|
+
if ([_simultaneousHandlers count]) {
|
396
408
|
for (NSNumber *handlerTag in _simultaneousHandlers) {
|
397
409
|
if ([handler.tag isEqual:handlerTag]) {
|
398
410
|
return YES;
|
399
411
|
}
|
400
412
|
}
|
413
|
+
} else if (handler->_simultaneousHandlers) {
|
414
|
+
for (NSNumber *handlerTag in handler->_simultaneousHandlers) {
|
415
|
+
if ([self.tag isEqual:handlerTag]) {
|
416
|
+
return YES;
|
417
|
+
}
|
418
|
+
}
|
401
419
|
}
|
402
420
|
}
|
403
421
|
return NO;
|
@@ -4,7 +4,6 @@
|
|
4
4
|
#import <React/RCTViewManager.h>
|
5
5
|
#import <React/RCTComponent.h>
|
6
6
|
#import <React/RCTRootView.h>
|
7
|
-
#import <React/RCTTouchHandler.h>
|
8
7
|
#import <React/RCTUIManager.h>
|
9
8
|
#import <React/RCTEventDispatcher.h>
|
10
9
|
|
@@ -22,6 +21,9 @@
|
|
22
21
|
|
23
22
|
#ifdef RN_FABRIC_ENABLED
|
24
23
|
#import <React/RCTViewComponentView.h>
|
24
|
+
#import <React/RCTSurfaceTouchHandler.h>
|
25
|
+
#else
|
26
|
+
#import <React/RCTTouchHandler.h>
|
25
27
|
#endif // RN_FABRIC_ENABLED
|
26
28
|
|
27
29
|
#import "Handlers/RNPanHandler.h"
|
@@ -211,8 +213,14 @@
|
|
211
213
|
// Once the upstream fix lands the line below along with this comment can be removed
|
212
214
|
if ([gestureRecognizer.view isKindOfClass:[UIScrollView class]]) return;
|
213
215
|
|
216
|
+
#ifdef RN_FABRIC_ENABLED
|
217
|
+
RCTSurfaceTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)];
|
218
|
+
#else
|
214
219
|
RCTTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)];
|
215
|
-
|
220
|
+
#endif
|
221
|
+
[touchHandler setEnabled:NO];
|
222
|
+
[touchHandler setEnabled:YES];
|
223
|
+
|
216
224
|
}
|
217
225
|
|
218
226
|
#pragma mark Events
|
@@ -60,7 +60,10 @@ RCT_EXPORT_MODULE()
|
|
60
60
|
|
61
61
|
- (void)invalidate
|
62
62
|
{
|
63
|
-
|
63
|
+
RNGestureHandlerManager *handlerManager = _manager;
|
64
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
65
|
+
[handlerManager dropAllGestureHandlers];
|
66
|
+
});
|
64
67
|
|
65
68
|
_manager = nil;
|
66
69
|
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
|
10
10
|
{
|
11
|
-
if ((self = [super initWithTarget:self action:
|
11
|
+
if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
|
12
12
|
_handler = gestureHandler;
|
13
13
|
self.delegate = self;
|
14
14
|
_activePointers = 0;
|
@@ -16,6 +16,14 @@
|
|
16
16
|
return self;
|
17
17
|
}
|
18
18
|
|
19
|
+
- (void)handleGesture:(UIGestureRecognizer *)recognizer
|
20
|
+
{
|
21
|
+
if (recognizer.state == UIGestureRecognizerStateBegan) {
|
22
|
+
self.state = UIGestureRecognizerStateEnded;
|
23
|
+
[self reset];
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
19
27
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
20
28
|
{
|
21
29
|
[super touchesBegan:touches withEvent:event];
|
@@ -35,8 +43,7 @@
|
|
35
43
|
_activePointers -= touches.count;
|
36
44
|
|
37
45
|
if (_activePointers == 0) {
|
38
|
-
|
39
|
-
[self reset];
|
46
|
+
self.state = UIGestureRecognizerStateBegan;
|
40
47
|
}
|
41
48
|
}
|
42
49
|
|
@@ -10,7 +10,12 @@
|
|
10
10
|
|
11
11
|
#import <UIKit/UIGestureRecognizerSubclass.h>
|
12
12
|
|
13
|
+
#ifdef RN_FABRIC_ENABLED
|
14
|
+
#import <React/RCTSurfaceTouchHandler.h>
|
15
|
+
#else
|
13
16
|
#import <React/RCTTouchHandler.h>
|
17
|
+
#endif // RN_FABRIC_ENABLED
|
18
|
+
|
14
19
|
|
15
20
|
@implementation RNRootViewGestureRecognizer
|
16
21
|
{
|
@@ -43,7 +48,13 @@
|
|
43
48
|
|
44
49
|
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
|
45
50
|
{
|
46
|
-
return ![preventedGestureRecognizer isKindOfClass:[
|
51
|
+
return ![preventedGestureRecognizer isKindOfClass:[
|
52
|
+
#ifdef RN_FABRIC_ENABLED
|
53
|
+
RCTSurfaceTouchHandler
|
54
|
+
#else
|
55
|
+
RCTTouchHandler
|
56
|
+
#endif
|
57
|
+
class]];
|
47
58
|
}
|
48
59
|
|
49
60
|
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
|
@@ -0,0 +1,81 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = exports.Gestures = void 0;
|
7
|
+
|
8
|
+
var _constants = require("./web/constants");
|
9
|
+
|
10
|
+
var _FlingGestureHandler = _interopRequireDefault(require("./web/FlingGestureHandler"));
|
11
|
+
|
12
|
+
var _LongPressGestureHandler = _interopRequireDefault(require("./web/LongPressGestureHandler"));
|
13
|
+
|
14
|
+
var _NativeViewGestureHandler = _interopRequireDefault(require("./web/NativeViewGestureHandler"));
|
15
|
+
|
16
|
+
var NodeManager = _interopRequireWildcard(require("./web/NodeManager"));
|
17
|
+
|
18
|
+
var _PanGestureHandler = _interopRequireDefault(require("./web/PanGestureHandler"));
|
19
|
+
|
20
|
+
var _PinchGestureHandler = _interopRequireDefault(require("./web/PinchGestureHandler"));
|
21
|
+
|
22
|
+
var _RotationGestureHandler = _interopRequireDefault(require("./web/RotationGestureHandler"));
|
23
|
+
|
24
|
+
var _TapGestureHandler = _interopRequireDefault(require("./web/TapGestureHandler"));
|
25
|
+
|
26
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
27
|
+
|
28
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
29
|
+
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31
|
+
|
32
|
+
const Gestures = {
|
33
|
+
PanGestureHandler: _PanGestureHandler.default,
|
34
|
+
RotationGestureHandler: _RotationGestureHandler.default,
|
35
|
+
PinchGestureHandler: _PinchGestureHandler.default,
|
36
|
+
TapGestureHandler: _TapGestureHandler.default,
|
37
|
+
NativeViewGestureHandler: _NativeViewGestureHandler.default,
|
38
|
+
LongPressGestureHandler: _LongPressGestureHandler.default,
|
39
|
+
FlingGestureHandler: _FlingGestureHandler.default // ForceTouchGestureHandler,
|
40
|
+
|
41
|
+
};
|
42
|
+
exports.Gestures = Gestures;
|
43
|
+
var _default = {
|
44
|
+
Direction: _constants.Direction,
|
45
|
+
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
47
|
+
handleSetJSResponder() {},
|
48
|
+
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
50
|
+
handleClearJSResponder() {},
|
51
|
+
|
52
|
+
createGestureHandler(handlerName, handlerTag, config) {
|
53
|
+
//TODO(TS) extends config
|
54
|
+
if (!(handlerName in Gestures)) throw new Error(`react-native-gesture-handler: ${handlerName} is not supported on macos.`);
|
55
|
+
const GestureClass = Gestures[handlerName];
|
56
|
+
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
57
|
+
this.updateGestureHandler(handlerTag, config);
|
58
|
+
},
|
59
|
+
|
60
|
+
attachGestureHandler(handlerTag, newView, _actionType, propsRef) {
|
61
|
+
NodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
62
|
+
},
|
63
|
+
|
64
|
+
updateGestureHandler(handlerTag, newConfig) {
|
65
|
+
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
66
|
+
},
|
67
|
+
|
68
|
+
getGestureHandlerNode(handlerTag) {
|
69
|
+
return NodeManager.getHandler(handlerTag);
|
70
|
+
},
|
71
|
+
|
72
|
+
dropGestureHandler(handlerTag) {
|
73
|
+
NodeManager.dropGestureHandler(handlerTag);
|
74
|
+
},
|
75
|
+
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
77
|
+
flushOperations() {}
|
78
|
+
|
79
|
+
};
|
80
|
+
exports.default = _default;
|
81
|
+
//# sourceMappingURL=RNGestureHandlerModule.macos.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["RNGestureHandlerModule.macos.ts"],"names":["Gestures","PanGestureHandler","RotationGestureHandler","PinchGestureHandler","TapGestureHandler","NativeViewGestureHandler","LongPressGestureHandler","FlingGestureHandler","Direction","handleSetJSResponder","handleClearJSResponder","createGestureHandler","handlerName","handlerTag","config","Error","GestureClass","NodeManager","updateGestureHandler","attachGestureHandler","newView","_actionType","propsRef","getHandler","setView","newConfig","updateGestureConfig","getGestureHandlerNode","dropGestureHandler","flushOperations"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEO,MAAMA,QAAQ,GAAG;AACtBC,EAAAA,iBAAiB,EAAjBA,0BADsB;AAEtBC,EAAAA,sBAAsB,EAAtBA,+BAFsB;AAGtBC,EAAAA,mBAAmB,EAAnBA,4BAHsB;AAItBC,EAAAA,iBAAiB,EAAjBA,0BAJsB;AAKtBC,EAAAA,wBAAwB,EAAxBA,iCALsB;AAMtBC,EAAAA,uBAAuB,EAAvBA,gCANsB;AAOtBC,EAAAA,mBAAmB,EAAnBA,4BAPsB,CAQtB;;AARsB,CAAjB;;eAWQ;AACbC,EAAAA,SAAS,EAATA,oBADa;;AAEb;AACAC,EAAAA,oBAAoB,GAAG,CAAE,CAHZ;;AAIb;AACAC,EAAAA,sBAAsB,GAAG,CAAE,CALd;;AAMbC,EAAAA,oBAAoB,CAClBC,WADkB,EAElBC,UAFkB,EAGlBC,MAHkB,EAIlB;AACA;AACA,QAAI,EAAEF,WAAW,IAAIZ,QAAjB,CAAJ,EACE,MAAM,IAAIe,KAAJ,CACH,iCAAgCH,WAAY,6BADzC,CAAN;AAGF,UAAMI,YAAY,GAAGhB,QAAQ,CAACY,WAAD,CAA7B;AACAK,IAAAA,WAAW,CAACN,oBAAZ,CAAiCE,UAAjC,EAA6C,IAAIG,YAAJ,EAA7C;AACA,SAAKE,oBAAL,CAA0BL,UAA1B,EAAsCC,MAAtC;AACD,GAnBY;;AAoBbK,EAAAA,oBAAoB,CAClBN,UADkB,EAElBO,OAFkB,EAGlBC,WAHkB,EAIlBC,QAJkB,EAKlB;AACAL,IAAAA,WAAW,CAACM,UAAZ,CAAuBV,UAAvB,EAAmCW,OAAnC,CAA2CJ,OAA3C,EAAoDE,QAApD;AACD,GA3BY;;AA4BbJ,EAAAA,oBAAoB,CAACL,UAAD,EAAqBY,SAArB,EAAqC;AACvDR,IAAAA,WAAW,CAACM,UAAZ,CAAuBV,UAAvB,EAAmCa,mBAAnC,CAAuDD,SAAvD;AACD,GA9BY;;AA+BbE,EAAAA,qBAAqB,CAACd,UAAD,EAAqB;AACxC,WAAOI,WAAW,CAACM,UAAZ,CAAuBV,UAAvB,CAAP;AACD,GAjCY;;AAkCbe,EAAAA,kBAAkB,CAACf,UAAD,EAAqB;AACrCI,IAAAA,WAAW,CAACW,kBAAZ,CAA+Bf,UAA/B;AACD,GApCY;;AAqCb;AACAgB,EAAAA,eAAe,GAAG,CAAE;;AAtCP,C","sourcesContent":["import { ActionType } from './ActionType';\nimport { Direction } from './web/constants';\nimport FlingGestureHandler from './web/FlingGestureHandler';\nimport LongPressGestureHandler from './web/LongPressGestureHandler';\nimport NativeViewGestureHandler from './web/NativeViewGestureHandler';\nimport * as NodeManager from './web/NodeManager';\nimport PanGestureHandler from './web/PanGestureHandler';\nimport PinchGestureHandler from './web/PinchGestureHandler';\nimport RotationGestureHandler from './web/RotationGestureHandler';\nimport TapGestureHandler from './web/TapGestureHandler';\n\nexport const Gestures = {\n PanGestureHandler,\n RotationGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n NativeViewGestureHandler,\n LongPressGestureHandler,\n FlingGestureHandler,\n // ForceTouchGestureHandler,\n};\n\nexport default {\n Direction,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handleSetJSResponder() {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handleClearJSResponder() {},\n createGestureHandler<T>(\n handlerName: keyof typeof Gestures,\n handlerTag: number,\n config: T\n ) {\n //TODO(TS) extends config\n if (!(handlerName in Gestures))\n throw new Error(\n `react-native-gesture-handler: ${handlerName} is not supported on macos.`\n );\n const GestureClass = Gestures[handlerName];\n NodeManager.createGestureHandler(handlerTag, new GestureClass());\n this.updateGestureHandler(handlerTag, config);\n },\n attachGestureHandler(\n handlerTag: number,\n newView: number,\n _actionType: ActionType,\n propsRef: React.RefObject<unknown>\n ) {\n NodeManager.getHandler(handlerTag).setView(newView, propsRef);\n },\n updateGestureHandler(handlerTag: number, newConfig: any) {\n NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);\n },\n getGestureHandlerNode(handlerTag: number) {\n return NodeManager.getHandler(handlerTag);\n },\n dropGestureHandler(handlerTag: number) {\n NodeManager.dropGestureHandler(handlerTag);\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n flushOperations() {},\n};\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureButtons.tsx"],"names":["RawButton","GestureHandlerButton","shouldCancelWhenOutside","shouldActivateOnStart","BaseButton","React","Component","constructor","props","nativeEvent","state","oldState","pointerInside","active","State","ACTIVE","lastActive","onActiveStateChange","CANCELLED","onPress","e","onHandlerStateChange","handleEvent","onGestureEvent","render","rippleColor","rest","AnimatedBaseButton","Animated","createAnimatedComponent","btnStyles","StyleSheet","create","underlay","position","left","right","bottom","top","RectButton","Platform","OS","opacity","setValue","activeOpacity","Value","children","style","resolvedStyle","flatten","backgroundColor","underlayColor","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","BorderlessButton","borderless"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Platform,\n processColor,\n StyleSheet,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\nimport GestureHandlerButton from './GestureHandlerButton';\nimport { State } from '../State';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from '../handlers/NativeViewGestureHandler';\n\nexport interface RawButtonProps extends NativeViewGestureHandlerProps {\n /**\n * Defines if more than one button could be pressed simultaneously. By default\n * set true.\n */\n exclusive?: boolean;\n // TODO: we should transform props in `createNativeWrapper`\n\n /**\n * Android only.\n *\n * Defines color of native ripple animation used since API level 21.\n */\n rippleColor?: any; // it was present in BaseButtonProps before but is used here in code\n\n /**\n * Android only.\n *\n * Defines radius of native ripple animation used since API level 21.\n */\n rippleRadius?: number | null;\n\n /**\n * Android only.\n *\n * Set this to true if you want the ripple animation to render outside the view bounds.\n */\n borderless?: boolean;\n\n /**\n * Android only.\n *\n * Defines whether the ripple animation should be drawn on the foreground of the view.\n */\n foreground?: boolean;\n}\n\nexport interface BaseButtonProps extends RawButtonProps {\n /**\n * Called when the button gets pressed (analogous to `onPress` in\n * `TouchableHighlight` from RN core).\n */\n onPress?: (pointerInside: boolean) => void;\n\n /**\n * Called when button changes from inactive to active and vice versa. It\n * passes active state as a boolean variable as a first parameter for that\n * method.\n */\n onActiveStateChange?: (active: boolean) => void;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}\n\nexport interface RectButtonProps extends BaseButtonProps {\n /**\n * Background color that will be dimmed when button is in active state.\n */\n underlayColor?: string;\n\n /**\n * iOS only.\n *\n * Opacity applied to the underlay when button is in active state.\n */\n activeOpacity?: number;\n}\n\nexport interface BorderlessButtonProps extends BaseButtonProps {\n /**\n * iOS only.\n *\n * Opacity applied to the button when it is in an active state.\n */\n activeOpacity?: number;\n}\n\nexport const RawButton = createNativeWrapper(GestureHandlerButton, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: false,\n});\n\nexport class BaseButton extends React.Component<BaseButtonProps> {\n private lastActive: boolean;\n\n constructor(props: BaseButtonProps) {\n super(props);\n this.lastActive = false;\n }\n\n private handleEvent = ({\n nativeEvent,\n }: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {\n const { state, oldState, pointerInside } = nativeEvent;\n const active = pointerInside && state === State.ACTIVE;\n\n if (active !== this.lastActive && this.props.onActiveStateChange) {\n this.props.onActiveStateChange(active);\n }\n\n if (\n oldState === State.ACTIVE &&\n state !== State.CANCELLED &&\n this.lastActive &&\n this.props.onPress\n ) {\n this.props.onPress(active);\n }\n\n this.lastActive = active;\n };\n\n // Normally, the parent would execute it's handler first, then forward the\n // event to listeners. However, here our handler is virtually only forwarding\n // events to listeners, so we reverse the order to keep the proper order of\n // the callbacks (from \"raw\" ones to \"processed\").\n private onHandlerStateChange = (\n e: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>\n ) => {\n this.props.onHandlerStateChange?.(e);\n this.handleEvent(e);\n };\n\n private onGestureEvent = (\n e: GestureEvent<NativeViewGestureHandlerPayload>\n ) => {\n this.props.onGestureEvent?.(e);\n this.handleEvent(\n e as HandlerStateChangeEvent<NativeViewGestureHandlerPayload>\n ); // TODO: maybe it is not correct\n };\n\n render() {\n const { rippleColor, ...rest } = this.props;\n\n return (\n <RawButton\n rippleColor={processColor(rippleColor)}\n {...rest}\n onGestureEvent={this.onGestureEvent}\n onHandlerStateChange={this.onHandlerStateChange}\n />\n );\n }\n}\n\nconst AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);\n\nconst btnStyles = StyleSheet.create({\n underlay: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n top: 0,\n },\n});\n\nexport class RectButton extends React.Component<RectButtonProps> {\n static defaultProps = {\n activeOpacity: 0.105,\n underlayColor: 'black',\n };\n\n private opacity: Animated.Value;\n\n constructor(props: RectButtonProps) {\n super(props);\n this.opacity = new Animated.Value(0);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 0);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n const resolvedStyle = StyleSheet.flatten(style ?? {});\n\n return (\n <BaseButton\n {...rest}\n style={resolvedStyle}\n onActiveStateChange={this.onActiveStateChange}>\n <Animated.View\n style={[\n btnStyles.underlay,\n {\n opacity: this.opacity,\n backgroundColor: this.props.underlayColor,\n borderRadius: resolvedStyle.borderRadius,\n borderTopLeftRadius: resolvedStyle.borderTopLeftRadius,\n borderTopRightRadius: resolvedStyle.borderTopRightRadius,\n borderBottomLeftRadius: resolvedStyle.borderBottomLeftRadius,\n borderBottomRightRadius: resolvedStyle.borderBottomRightRadius,\n },\n ]}\n />\n {children}\n </BaseButton>\n );\n }\n}\n\nexport class BorderlessButton extends React.Component<BorderlessButtonProps> {\n static defaultProps = {\n activeOpacity: 0.3,\n borderless: true,\n };\n\n private opacity: Animated.Value;\n\n constructor(props: BorderlessButtonProps) {\n super(props);\n this.opacity = new Animated.Value(1);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 1);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n return (\n <AnimatedBaseButton\n {...rest}\n onActiveStateChange={this.onActiveStateChange}\n style={[style, Platform.OS === 'ios' && { opacity: this.opacity }]}>\n {children}\n </AnimatedBaseButton>\n );\n }\n}\n\nexport { default as PureNativeButton } from './GestureHandlerButton';\n"]}
|
1
|
+
{"version":3,"sources":["GestureButtons.tsx"],"names":["RawButton","GestureHandlerButton","shouldCancelWhenOutside","shouldActivateOnStart","BaseButton","React","Component","constructor","props","nativeEvent","state","oldState","pointerInside","active","State","ACTIVE","lastActive","onActiveStateChange","CANCELLED","onPress","e","onHandlerStateChange","handleEvent","onGestureEvent","render","rippleColor","rest","AnimatedBaseButton","Animated","createAnimatedComponent","btnStyles","StyleSheet","create","underlay","position","left","right","bottom","top","RectButton","Platform","OS","opacity","setValue","activeOpacity","Value","children","style","resolvedStyle","flatten","backgroundColor","underlayColor","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","BorderlessButton","borderless"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Platform,\n processColor,\n StyleSheet,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\nimport GestureHandlerButton from './GestureHandlerButton';\nimport { State } from '../State';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from '../handlers/NativeViewGestureHandler';\n\nexport interface RawButtonProps extends NativeViewGestureHandlerProps {\n /**\n * Defines if more than one button could be pressed simultaneously. By default\n * set true.\n */\n exclusive?: boolean;\n // TODO: we should transform props in `createNativeWrapper`\n\n /**\n * Android only.\n *\n * Defines color of native ripple animation used since API level 21.\n */\n rippleColor?: any; // it was present in BaseButtonProps before but is used here in code\n\n /**\n * Android only.\n *\n * Defines radius of native ripple animation used since API level 21.\n */\n rippleRadius?: number | null;\n\n /**\n * Android only.\n *\n * Set this to true if you want the ripple animation to render outside the view bounds.\n */\n borderless?: boolean;\n\n /**\n * Android only.\n *\n * Defines whether the ripple animation should be drawn on the foreground of the view.\n */\n foreground?: boolean;\n\n /**\n * Android only.\n *\n * Set this to true if you don't want the system to play sound when the button is pressed.\n */\n touchSoundDisabled?: boolean;\n}\n\nexport interface BaseButtonProps extends RawButtonProps {\n /**\n * Called when the button gets pressed (analogous to `onPress` in\n * `TouchableHighlight` from RN core).\n */\n onPress?: (pointerInside: boolean) => void;\n\n /**\n * Called when button changes from inactive to active and vice versa. It\n * passes active state as a boolean variable as a first parameter for that\n * method.\n */\n onActiveStateChange?: (active: boolean) => void;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}\n\nexport interface RectButtonProps extends BaseButtonProps {\n /**\n * Background color that will be dimmed when button is in active state.\n */\n underlayColor?: string;\n\n /**\n * iOS only.\n *\n * Opacity applied to the underlay when button is in active state.\n */\n activeOpacity?: number;\n}\n\nexport interface BorderlessButtonProps extends BaseButtonProps {\n /**\n * iOS only.\n *\n * Opacity applied to the button when it is in an active state.\n */\n activeOpacity?: number;\n}\n\nexport const RawButton = createNativeWrapper(GestureHandlerButton, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: false,\n});\n\nexport class BaseButton extends React.Component<BaseButtonProps> {\n private lastActive: boolean;\n\n constructor(props: BaseButtonProps) {\n super(props);\n this.lastActive = false;\n }\n\n private handleEvent = ({\n nativeEvent,\n }: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {\n const { state, oldState, pointerInside } = nativeEvent;\n const active = pointerInside && state === State.ACTIVE;\n\n if (active !== this.lastActive && this.props.onActiveStateChange) {\n this.props.onActiveStateChange(active);\n }\n\n if (\n oldState === State.ACTIVE &&\n state !== State.CANCELLED &&\n this.lastActive &&\n this.props.onPress\n ) {\n this.props.onPress(active);\n }\n\n this.lastActive = active;\n };\n\n // Normally, the parent would execute it's handler first, then forward the\n // event to listeners. However, here our handler is virtually only forwarding\n // events to listeners, so we reverse the order to keep the proper order of\n // the callbacks (from \"raw\" ones to \"processed\").\n private onHandlerStateChange = (\n e: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>\n ) => {\n this.props.onHandlerStateChange?.(e);\n this.handleEvent(e);\n };\n\n private onGestureEvent = (\n e: GestureEvent<NativeViewGestureHandlerPayload>\n ) => {\n this.props.onGestureEvent?.(e);\n this.handleEvent(\n e as HandlerStateChangeEvent<NativeViewGestureHandlerPayload>\n ); // TODO: maybe it is not correct\n };\n\n render() {\n const { rippleColor, ...rest } = this.props;\n\n return (\n <RawButton\n rippleColor={processColor(rippleColor)}\n {...rest}\n onGestureEvent={this.onGestureEvent}\n onHandlerStateChange={this.onHandlerStateChange}\n />\n );\n }\n}\n\nconst AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);\n\nconst btnStyles = StyleSheet.create({\n underlay: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n top: 0,\n },\n});\n\nexport class RectButton extends React.Component<RectButtonProps> {\n static defaultProps = {\n activeOpacity: 0.105,\n underlayColor: 'black',\n };\n\n private opacity: Animated.Value;\n\n constructor(props: RectButtonProps) {\n super(props);\n this.opacity = new Animated.Value(0);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 0);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n const resolvedStyle = StyleSheet.flatten(style ?? {});\n\n return (\n <BaseButton\n {...rest}\n style={resolvedStyle}\n onActiveStateChange={this.onActiveStateChange}>\n <Animated.View\n style={[\n btnStyles.underlay,\n {\n opacity: this.opacity,\n backgroundColor: this.props.underlayColor,\n borderRadius: resolvedStyle.borderRadius,\n borderTopLeftRadius: resolvedStyle.borderTopLeftRadius,\n borderTopRightRadius: resolvedStyle.borderTopRightRadius,\n borderBottomLeftRadius: resolvedStyle.borderBottomLeftRadius,\n borderBottomRightRadius: resolvedStyle.borderBottomRightRadius,\n },\n ]}\n />\n {children}\n </BaseButton>\n );\n }\n}\n\nexport class BorderlessButton extends React.Component<BorderlessButtonProps> {\n static defaultProps = {\n activeOpacity: 0.3,\n borderless: true,\n };\n\n private opacity: Animated.Value;\n\n constructor(props: BorderlessButtonProps) {\n super(props);\n this.opacity = new Animated.Value(1);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 1);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n return (\n <AnimatedBaseButton\n {...rest}\n onActiveStateChange={this.onActiveStateChange}\n style={[style, Platform.OS === 'ios' && { opacity: this.opacity }]}>\n {children}\n </AnimatedBaseButton>\n );\n }\n}\n\nexport { default as PureNativeButton } from './GestureHandlerButton';\n"]}
|
@@ -238,6 +238,8 @@ class GenericTouchable extends React.Component {
|
|
238
238
|
}
|
239
239
|
|
240
240
|
render() {
|
241
|
+
var _this$props$touchSoun;
|
242
|
+
|
241
243
|
const coreProps = {
|
242
244
|
accessible: this.props.accessible !== false,
|
243
245
|
accessibilityLabel: this.props.accessibilityLabel,
|
@@ -260,7 +262,8 @@ class GenericTouchable extends React.Component {
|
|
260
262
|
hitSlop: this.props.hitSlop,
|
261
263
|
shouldActivateOnStart: this.props.shouldActivateOnStart,
|
262
264
|
disallowInterruption: this.props.disallowInterruption,
|
263
|
-
testID: this.props.testID
|
265
|
+
testID: this.props.testID,
|
266
|
+
touchSoundDisabled: (_this$props$touchSoun = this.props.touchSoundDisabled) !== null && _this$props$touchSoun !== void 0 ? _this$props$touchSoun : false
|
264
267
|
}, this.props.extraButtonProps), /*#__PURE__*/React.createElement(_reactNative.Animated.View, _extends({}, coreProps, {
|
265
268
|
style: this.props.style
|
266
269
|
}), this.props.children));
|