@@ -478,19 +478,30 @@ mergeInto(LibraryManager.library, {
478
478
// in the coordinates.
479
479
var rect = Module [ "canvas" ] . getBoundingClientRect ( ) ;
480
480
var x , y ;
481
+
482
+ // Neither .scrollX or .pageXOffset are defined in a spec, but
483
+ // we prefer .scrollX because it is currently in a spec draft.
484
+ // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
485
+ var scrollX = ( ( typeof window . scrollX !== 'undefined' ) ? window . scrollX : window . pageXOffset ) ;
486
+ var scrollY = ( ( typeof window . scrollY !== 'undefined' ) ? window . scrollY : window . pageYOffset ) ;
487
+ #if ASSERTIONS
488
+ // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset
489
+ // and we have no viable fallback.
490
+ assert ( ( typeof scrollX !== 'undefined' ) && ( typeof scrollY !== 'undefined' ) , 'Unable to retrieve scroll position, mouse positions likely broken.' ) ;
491
+ #endif
481
492
if ( event . type == 'touchstart' ||
482
493
event . type == 'touchend' ||
483
494
event . type == 'touchmove' ) {
484
495
var t = event . touches . item ( 0 ) ;
485
496
if ( t ) {
486
- x = t . pageX - ( window . scrollX + rect . left ) ;
487
- y = t . pageY - ( window . scrollY + rect . top ) ;
497
+ x = t . pageX - ( scrollX + rect . left ) ;
498
+ y = t . pageY - ( scrollY + rect . top ) ;
488
499
} else {
489
500
return ;
490
501
}
491
502
} else {
492
- x = event . pageX - ( window . scrollX + rect . left ) ;
493
- y = event . pageY - ( window . scrollY + rect . top ) ;
503
+ x = event . pageX - ( scrollX + rect . left ) ;
504
+ y = event . pageY - ( scrollY + rect . top ) ;
494
505
}
495
506
496
507
// the canvas might be CSS-scaled compared to its backbuffer;
0 commit comments