@@ -21,6 +21,7 @@ export default class FlingGestureHandler extends GestureHandler {
21
21
private startY = 0 ;
22
22
23
23
private maxNumberOfPointersSimultaneously = 0 ;
24
+ private keyPointer = NaN ;
24
25
25
26
public init ( ref : number , propsRef : React . RefObject < unknown > ) : void {
26
27
super . init ( ref , propsRef ) ;
@@ -51,9 +52,9 @@ export default class FlingGestureHandler extends GestureHandler {
51
52
} ;
52
53
}
53
54
54
- private startFling ( event : AdaptedEvent ) : void {
55
- this . startX = event . x ;
56
- this . startY = event . y ;
55
+ private startFling ( ) : void {
56
+ this . startX = this . tracker . getLastX ( this . keyPointer ) ;
57
+ this . startY = this . tracker . getLastY ( this . keyPointer ) ;
57
58
58
59
this . begin ( ) ;
59
60
@@ -62,18 +63,22 @@ export default class FlingGestureHandler extends GestureHandler {
62
63
this . delayTimeout = setTimeout ( ( ) => this . fail ( ) , this . maxDurationMs ) ;
63
64
}
64
65
65
- private tryEndFling ( event : AdaptedEvent ) : boolean {
66
+ private tryEndFling ( ) : boolean {
66
67
if (
67
68
this . maxNumberOfPointersSimultaneously ===
68
69
this . numberOfPointersRequired &&
69
70
( ( this . direction & Direction . RIGHT &&
70
- event . x - this . startX > this . minAcceptableDelta ) ||
71
+ this . tracker . getLastX ( this . keyPointer ) - this . startX >
72
+ this . minAcceptableDelta ) ||
71
73
( this . direction & Direction . LEFT &&
72
- this . startX - event . x > this . minAcceptableDelta ) ||
74
+ this . startX - this . tracker . getLastX ( this . keyPointer ) >
75
+ this . minAcceptableDelta ) ||
73
76
( this . direction & Direction . UP &&
74
- this . startY - event . y > this . minAcceptableDelta ) ||
77
+ this . startY - this . tracker . getLastY ( this . keyPointer ) >
78
+ this . minAcceptableDelta ) ||
75
79
( this . direction & Direction . DOWN &&
76
- event . y - this . startY > this . minAcceptableDelta ) )
80
+ this . tracker . getLastY ( this . keyPointer ) - this . startY >
81
+ this . minAcceptableDelta ) )
77
82
) {
78
83
clearTimeout ( this . delayTimeout ) ;
79
84
this . activate ( ) ;
@@ -84,34 +89,36 @@ export default class FlingGestureHandler extends GestureHandler {
84
89
return false ;
85
90
}
86
91
87
- private endFling ( event : AdaptedEvent ) {
88
- if ( ! this . tryEndFling ( event ) ) {
92
+ private endFling ( ) {
93
+ if ( ! this . tryEndFling ( ) ) {
89
94
this . fail ( ) ;
90
95
}
91
96
}
92
97
93
98
protected onPointerDown ( event : AdaptedEvent ) : void {
94
99
this . tracker . addToTracker ( event ) ;
100
+ this . keyPointer = event . pointerId ;
101
+
95
102
super . onPointerDown ( event ) ;
96
- this . newPointerAction ( event ) ;
103
+ this . newPointerAction ( ) ;
97
104
}
98
105
99
106
protected onPointerAdd ( event : AdaptedEvent ) : void {
100
107
this . tracker . addToTracker ( event ) ;
101
108
super . onPointerAdd ( event ) ;
102
- this . newPointerAction ( event ) ;
109
+ this . newPointerAction ( ) ;
103
110
}
104
111
105
- private newPointerAction ( event : AdaptedEvent ) : void {
112
+ private newPointerAction ( ) : void {
106
113
if ( this . currentState === State . UNDETERMINED ) {
107
- this . startFling ( event ) ;
114
+ this . startFling ( ) ;
108
115
}
109
116
110
117
if ( this . currentState !== State . BEGAN ) {
111
118
return ;
112
119
}
113
120
114
- this . tryEndFling ( event ) ;
121
+ this . tryEndFling ( ) ;
115
122
116
123
if (
117
124
this . tracker . getTrackedPointersCount ( ) >
@@ -128,14 +135,16 @@ export default class FlingGestureHandler extends GestureHandler {
128
135
return ;
129
136
}
130
137
131
- this . tryEndFling ( event ) ;
138
+ this . tryEndFling ( ) ;
132
139
133
140
super . onPointerMove ( event ) ;
134
141
}
135
142
136
143
protected onPointerUp ( event : AdaptedEvent ) : void {
137
144
super . onPointerUp ( event ) ;
138
145
this . onUp ( event ) ;
146
+
147
+ this . keyPointer = NaN ;
139
148
}
140
149
141
150
protected onPointerRemove ( event : AdaptedEvent ) : void {
@@ -148,7 +157,7 @@ export default class FlingGestureHandler extends GestureHandler {
148
157
if ( this . currentState !== State . BEGAN ) {
149
158
return ;
150
159
}
151
- this . endFling ( event ) ;
160
+ this . endFling ( ) ;
152
161
}
153
162
154
163
protected onPointerCancel ( event : AdaptedEvent ) : void {
0 commit comments