You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
11 lines
3.8 KiB
11 lines
3.8 KiB
// All material copyright Esri, All Rights Reserved, unless otherwise specified. |
|
// See https://js.arcgis.com/4.30/esri/copyright.txt for details. |
|
//>>built |
|
define(["exports","../../../core/screenUtils","../../../core/time","../InputHandler","./support"],function(f,m,k,n,p){function l(a){const b=[];a.forEach(c=>{b.push(m.createScreenPoint(c.event.x,c.event.y))});return p.fitCircleLSQ(b)}function g(a){const b=l(a);let c=0;a.forEach(d=>{var e=h(d,b);for(e-=d.lastAngle;e>Math.PI;)e-=2*Math.PI;for(;e<-Math.PI;)e+=2*Math.PI;e=d.lastAngle+e;d.lastAngle=e;c+=e-d.initialAngle});c/=a.size||1;return{angle:c,radius:b.radius,center:b.center}}function q(a){const b= |
|
new Map;a.forEach((c,d)=>b.set(d,c.event));return b}function h(a,b){a=a.event;return Math.atan2(a.y-b.center.y,a.x-b.center.x)}class r extends n.InputHandler{constructor(a){super(!1);this._navigationTouch=a;this._startStateModifiers=new Set;this._activePointerMap=new Map;this._isCurrentDragSuppressed=this._isDragging=!1;this._drag=this.registerOutgoing("drag");this.registerIncoming("pointer-drag",this._handlePointerDrag.bind(this));this.registerIncoming("pointer-up",this._handlePointerUpAndPointerLost.bind(this)); |
|
this.registerIncoming("pointer-capture-lost",this._handlePointerUpAndPointerLost.bind(this));this.registerIncoming("pointer-cancel",this._handlePointerUpAndPointerLost.bind(this))}_createPayload(a,b,c,d){return{action:a,pointerType:this._pointerType,button:this._mouseButton,buttons:b.buttons,timestamp:d,pointers:q(this._activePointerMap),pointer:b,angle:c.angle,radius:c.radius,center:c.center}}_addPointer(a){var b=a.native.pointerId;const c=g(this._activePointerMap).angle;a={event:a,initialAngle:0, |
|
lastAngle:0};this._activePointerMap.set(b,a);b=h(a,l(this._activePointerMap));a.initialAngle=b;a.lastAngle=b;this._updatePointerAngles(c)}_updatePointer(a){if(!a||null!=a.x||null!=a.y){var b=this._activePointerMap.get(a.native.pointerId);b?b.event=a:this._addPointer(a)}}_removePointer(a){const b=g(this._activePointerMap).angle;this._activePointerMap.delete(a);this._updatePointerAngles(b)}_updatePointerAngles(a){const b=g(this._activePointerMap);this._activePointerMap.forEach(c=>{c.initialAngle=h(c, |
|
b)-a;c.lastAngle=h(c,b)-a})}_emitEvent(a,b,c){const d=g(this._activePointerMap);this._drag.emit(this._createPayload(a,b,d,c),void 0,this._startStateModifiers)}_handlePointerUpAndPointerLost(a){const b=a.data.native.pointerId,c=k.Milliseconds(a.timestamp);this._activePointerMap.get(b)&&(1===this._activePointerMap.size?(this._updatePointer(a.data),!this._isCurrentDragSuppressed&&this._emitEvent("end",a.data,c),this._isCurrentDragSuppressed=this._isDragging=!1,this._removePointer(b)):(this._removePointer(b), |
|
this._emitEvent("removed",a.data,k.Milliseconds(a.timestamp))))}_handlePointerDrag(a){const b=a.data,c=b.currentEvent,d=k.Milliseconds(a.timestamp);switch(b.action){case "start":case "update":this._isDragging?this._activePointerMap.has(c.native.pointerId)?(this._updatePointer(c),!this._isCurrentDragSuppressed&&this._emitEvent("update",c,d)):(this._addPointer(c),this._emitEvent("added",c,d),this._isCurrentDragSuppressed=this._isSuppressed):(this._updatePointer(c),this._pointerType=a.data.startEvent.pointerType, |
|
this._mouseButton=a.data.startEvent.button,this._startStateModifiers=a.modifiers,this._isDragging=!0,this._isCurrentDragSuppressed=this._isSuppressed,!this._isCurrentDragSuppressed&&this._emitEvent("start",c,d))}}get _isSuppressed(){return!!this._navigationTouch&&!this._navigationTouch.browserTouchPanEnabled&&"touch"===this._pointerType&&1===this._activePointerMap.size}}f.Button=void 0;(function(a){a[a.Left=0]="Left";a[a.Middle=1]="Middle";a[a.Right=2]="Right";a[a.Back=3]="Back";a[a.Forward=4]="Forward"; |
|
a[a.Undefined=-1]="Undefined"})(f.Button||(f.Button={}));f.Drag=r;Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}); |