1
1
import { CSSType , PercentLength , View , Screen , GestureStateTypes , Utils , Application } from '@nativescript/core' ;
2
2
import { CanvasRenderingContext , TouchList } from '../common' ;
3
+ import { Pointer } from '@nativescript/core/ui/gestures' ;
3
4
4
5
export interface ICanvasBase {
5
6
on ( eventName : 'ready' , callback : ( data : any ) => void , thisArg ?: any ) : void ;
@@ -13,11 +14,18 @@ export abstract class CanvasBase extends View implements ICanvasBase {
13
14
14
15
protected constructor ( ) {
15
16
super ( ) ;
16
- this . _touchEvents = this . _touchEventsFN . bind ( this ) ;
17
- this . on ( 'touch, pan' , this . _touchEvents ) ;
18
17
this . _classList = new Set ( ) ;
19
18
}
20
19
20
+ __handleGestures ( ) {
21
+ if ( this . _touchEvents ) {
22
+ this . off ( 'touch, pan, pinch' , this . _touchEvents ) ;
23
+ this . _touchEvents = undefined ;
24
+ }
25
+ this . _touchEvents = this . _touchEventsFN . bind ( this ) ;
26
+ this . on ( 'touch, pan, pinch' , this . _touchEvents ) ;
27
+ }
28
+
21
29
_classList : Set < any > ;
22
30
23
31
get classList ( ) {
@@ -82,24 +90,31 @@ export abstract class CanvasBase extends View implements ICanvasBase {
82
90
return null ;
83
91
}
84
92
93
+ __touchStart ?: Pointer ;
94
+
85
95
_touchEventsFN ( event : any ) {
86
96
if ( event . eventName === 'touch' ) {
87
97
switch ( event . action ) {
88
98
case 'down' :
99
+ this . __touchStart = event . getActivePointers ( ) [ 0 ] ;
89
100
this . _emitEvent ( 'touchstart' , event ) ;
90
101
break ;
91
102
case 'up' :
92
103
this . _emitEvent ( 'touchend' , event ) ;
104
+ this . __touchStart = undefined ;
93
105
break ;
94
106
case 'cancel' :
95
107
this . _emitEvent ( 'touchcancel' , event ) ;
108
+ this . __touchStart = undefined ;
96
109
break ;
97
110
case 'move' :
98
111
// NOOP
99
112
break ;
100
113
default :
101
114
break ;
102
115
}
116
+ } else if ( event . eventName === 'pinch' ) {
117
+ this . _emitEvent ( 'touchmove:pinch' , event ) ;
103
118
} else if ( event . eventName === 'pan' ) {
104
119
if ( event . state === GestureStateTypes . began || event . state === GestureStateTypes . changed ) {
105
120
this . _emitEvent ( 'touchmove' , event ) ;
@@ -110,8 +125,9 @@ export abstract class CanvasBase extends View implements ICanvasBase {
110
125
_getTouchEvent ( name , event , target ) {
111
126
const pointers = new TouchList ( ) ;
112
127
const scale = 1 ;
113
- let activePointer = { } ;
128
+ let activePointer : { } ;
114
129
if ( name === 'touchmove' ) {
130
+ name = 'touchmove' ;
115
131
/* mouse */
116
132
activePointer = {
117
133
clientX : event . deltaX * scale ,
@@ -144,6 +160,55 @@ export abstract class CanvasBase extends View implements ICanvasBase {
144
160
screenY : event . deltaY * scale ,
145
161
target,
146
162
} ) ;
163
+ } else if ( name === 'touchmove:pinch' ) {
164
+ name = 'touchmove' ;
165
+ const x = event . getFocusX ( ) ;
166
+ const y = event . getFocusY ( ) ;
167
+ const scale = event . scale ;
168
+ // mouse event
169
+ activePointer = {
170
+ clientX : x * scale ,
171
+ clientY : y * scale ,
172
+ force : 0.0 ,
173
+ identifier : 0 ,
174
+ pageX : x * scale ,
175
+ pageY : y * scale ,
176
+ radiusX : 0 ,
177
+ radiusY : 0 ,
178
+ rotationAngle : 0 ,
179
+ screenX : x * scale ,
180
+ screenY : x * scale ,
181
+ } ;
182
+
183
+ pointers . push ( {
184
+ clientX : this . __touchStart . getX ( ) ,
185
+ clientY : this . __touchStart . getY ( ) ,
186
+ force : 0.0 ,
187
+ identifier : 0 ,
188
+ pageX : this . __touchStart . getX ( ) ,
189
+ pageY : this . __touchStart . getY ( ) ,
190
+ radiusX : 0 ,
191
+ radiusY : 0 ,
192
+ rotationAngle : 0 ,
193
+ screenX : this . __touchStart . getX ( ) ,
194
+ screenY : this . __touchStart . getY ( ) ,
195
+ target,
196
+ } ) ;
197
+
198
+ pointers . push ( {
199
+ clientX : x ,
200
+ clientY : y ,
201
+ force : 0.0 ,
202
+ identifier : 1 ,
203
+ pageX : x ,
204
+ pageY : y ,
205
+ radiusX : 0 ,
206
+ radiusY : 0 ,
207
+ rotationAngle : 0 ,
208
+ screenX : x ,
209
+ screenY : y ,
210
+ target,
211
+ } ) ;
147
212
} else {
148
213
const count = event . getAllPointers ( ) . length ;
149
214
const point = event . getActivePointers ( ) [ 0 ] ;
0 commit comments