comparison Platforms/Wasm/wasm-viewport.ts @ 506:801d2697a1b1 bgo-commands-codegen

Merge with am-touch-events
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 26 Feb 2019 21:33:16 +0100
parents 7cdb4634846c 3b4df9925db6
children 548eed46f535
comparison
equal deleted inserted replaced
505:4cc7bb55bd49 506:801d2697a1b1
63 private ViewportMouseUp : Function; 63 private ViewportMouseUp : Function;
64 private ViewportMouseEnter : Function; 64 private ViewportMouseEnter : Function;
65 private ViewportMouseLeave : Function; 65 private ViewportMouseLeave : Function;
66 private ViewportMouseWheel : Function; 66 private ViewportMouseWheel : Function;
67 private ViewportKeyPressed : Function; 67 private ViewportKeyPressed : Function;
68 private ViewportTouchStart : Function;
69 private ViewportTouchMove : Function;
70 private ViewportTouchEnd : Function;
68 71
69 private pimpl_ : any; // Private pointer to the underlying WebAssembly C++ object 72 private pimpl_ : any; // Private pointer to the underlying WebAssembly C++ object
70 73
71 public constructor(module: any, canvasId: string, cppViewport: any) { 74 public constructor(module: any, canvasId: string, cppViewport: any) {
72 75
89 this.ViewportMouseUp = this.module_.cwrap('ViewportMouseUp', null, [ 'number' ]); 92 this.ViewportMouseUp = this.module_.cwrap('ViewportMouseUp', null, [ 'number' ]);
90 this.ViewportMouseEnter = this.module_.cwrap('ViewportMouseEnter', null, [ 'number' ]); 93 this.ViewportMouseEnter = this.module_.cwrap('ViewportMouseEnter', null, [ 'number' ]);
91 this.ViewportMouseLeave = this.module_.cwrap('ViewportMouseLeave', null, [ 'number' ]); 94 this.ViewportMouseLeave = this.module_.cwrap('ViewportMouseLeave', null, [ 'number' ]);
92 this.ViewportMouseWheel = this.module_.cwrap('ViewportMouseWheel', null, [ 'number', 'number', 'number', 'number', 'number' ]); 95 this.ViewportMouseWheel = this.module_.cwrap('ViewportMouseWheel', null, [ 'number', 'number', 'number', 'number', 'number' ]);
93 this.ViewportKeyPressed = this.module_.cwrap('ViewportKeyPressed', null, [ 'number', 'number', 'string', 'number', 'number' ]); 96 this.ViewportKeyPressed = this.module_.cwrap('ViewportKeyPressed', null, [ 'number', 'number', 'string', 'number', 'number' ]);
97 this.ViewportTouchStart = this.module_.cwrap('ViewportTouchStart', null, [ 'number', 'number', 'number', 'number', 'number', 'number', 'number' ]);
98 this.ViewportTouchMove = this.module_.cwrap('ViewportTouchMove', null, [ 'number', 'number', 'number', 'number', 'number', 'number', 'number' ]);
99 this.ViewportTouchEnd = this.module_.cwrap('ViewportTouchEnd', null, [ 'number', 'number', 'number', 'number', 'number', 'number', 'number' ]);
94 } 100 }
95 101
96 public GetCppViewport() : number { 102 public GetCppViewport() : number {
97 return this.pimpl_; 103 return this.pimpl_;
98 } 104 }
195 }); 201 });
196 202
197 this.htmlCanvas_.addEventListener('mousedown', function(event) { 203 this.htmlCanvas_.addEventListener('mousedown', function(event) {
198 var x = event.pageX - this.offsetLeft; 204 var x = event.pageX - this.offsetLeft;
199 var y = event.pageY - this.offsetTop; 205 var y = event.pageY - this.offsetTop;
200 that.ViewportMouseDown(that.pimpl_, event.button, x, y, 0 /* TODO detect modifier keys*/); 206
207 that.ViewportMouseDown(that.pimpl_, event.button, x, y, 0 /* TODO detect modifier keys*/);
201 }); 208 });
202 209
203 this.htmlCanvas_.addEventListener('mousemove', function(event) { 210 this.htmlCanvas_.addEventListener('mousemove', function(event) {
204 var x = event.pageX - this.offsetLeft; 211 var x = event.pageX - this.offsetLeft;
205 var y = event.pageY - this.offsetTop; 212 var y = event.pageY - this.offsetTop;
227 var y = event.pageY - this.offsetTop; 234 var y = event.pageY - this.offsetTop;
228 that.ViewportMouseWheel(that.pimpl_, event.deltaY, x, y, event.ctrlKey); 235 that.ViewportMouseWheel(that.pimpl_, event.deltaY, x, y, event.ctrlKey);
229 event.preventDefault(); 236 event.preventDefault();
230 }); 237 });
231 238
232 this.htmlCanvas_.addEventListener('touchstart', function(event) { 239 this.htmlCanvas_.addEventListener('touchstart', function(event: TouchEvent) {
233 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport) 240 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport)
234 event.preventDefault(); 241 event.preventDefault();
235 event.stopPropagation(); 242 event.stopPropagation();
236 243
237 that.ResetTouch(); 244 // TODO: find a way to pass the coordinates as an array between JS and C++
245 var x0 = 0;
246 var y0 = 0;
247 var x1 = 0;
248 var y1 = 0;
249 var x2 = 0;
250 var y2 = 0;
251 if (event.targetTouches.length > 0) {
252 x0 = event.targetTouches[0].pageX;
253 y0 = event.targetTouches[0].pageY;
254 }
255 if (event.targetTouches.length > 1) {
256 x1 = event.targetTouches[1].pageX;
257 y1 = event.targetTouches[1].pageY;
258 }
259 if (event.targetTouches.length > 2) {
260 x2 = event.targetTouches[2].pageX;
261 y2 = event.targetTouches[2].pageY;
262 }
263
264 that.ViewportTouchStart(that.pimpl_, event.targetTouches.length, x0, y0, x1, y1, x2, y2);
238 }); 265 });
239 266
240 this.htmlCanvas_.addEventListener('touchend', function(event) { 267 this.htmlCanvas_.addEventListener('touchend', function(event) {
241 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport) 268 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport)
242 event.preventDefault(); 269 event.preventDefault();
243 event.stopPropagation(); 270 event.stopPropagation();
244 271
245 that.ResetTouch(); 272 // TODO: find a way to pass the coordinates as an array between JS and C++
273 var x0 = 0;
274 var y0 = 0;
275 var x1 = 0;
276 var y1 = 0;
277 var x2 = 0;
278 var y2 = 0;
279 if (event.targetTouches.length > 0) {
280 x0 = event.targetTouches[0].pageX;
281 y0 = event.targetTouches[0].pageY;
282 }
283 if (event.targetTouches.length > 1) {
284 x1 = event.targetTouches[1].pageX;
285 y1 = event.targetTouches[1].pageY;
286 }
287 if (event.targetTouches.length > 2) {
288 x2 = event.targetTouches[2].pageX;
289 y2 = event.targetTouches[2].pageY;
290 }
291
292 that.ViewportTouchEnd(that.pimpl_, event.targetTouches.length, x0, y0, x1, y1, x2, y2);
246 }); 293 });
247 294
248 this.htmlCanvas_.addEventListener('touchmove', function(event: TouchEvent) { 295 this.htmlCanvas_.addEventListener('touchmove', function(event: TouchEvent) {
249 296
250 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport) 297 // don't propagate events to the whole body (this could zoom the entire page instead of zooming the viewport)
251 event.preventDefault(); 298 event.preventDefault();
252 event.stopPropagation(); 299 event.stopPropagation();
300
301
302 // TODO: find a way to pass the coordinates as an array between JS and C++
303 var x0 = 0;
304 var y0 = 0;
305 var x1 = 0;
306 var y1 = 0;
307 var x2 = 0;
308 var y2 = 0;
309 if (event.targetTouches.length > 0) {
310 x0 = event.targetTouches[0].pageX;
311 y0 = event.targetTouches[0].pageY;
312 }
313 if (event.targetTouches.length > 1) {
314 x1 = event.targetTouches[1].pageX;
315 y1 = event.targetTouches[1].pageY;
316 }
317 if (event.targetTouches.length > 2) {
318 x2 = event.targetTouches[2].pageX;
319 y2 = event.targetTouches[2].pageY;
320 }
321
322 that.ViewportTouchMove(that.pimpl_, event.targetTouches.length, x0, y0, x1, y1, x2, y2);
323 return;
253 324
254 // if (!that.touchGestureInProgress_) { 325 // if (!that.touchGestureInProgress_) {
255 // // starting a new gesture 326 // // starting a new gesture
256 // that.touchCount_ = event.targetTouches.length; 327 // that.touchCount_ = event.targetTouches.length;
257 // for (var t = 0; t < event.targetTouches.length; t++) { 328 // for (var t = 0; t < event.targetTouches.length; t++) {