@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.64 kB
JavaScript
import{PinchAndPanController as t}from"../../state/controllers/global/PinchAndPanController.js";import{PinchAndPanController as e}from"../../state/controllers/local/PinchAndPanController.js";import{InputHandler as s}from"../../../input/InputHandler.js";import{eventMatchesMousePointerAction as r}from"../../../input/handlers/support.js";class i extends s{constructor(t,e,s){super(!0),this._view=t,this.pointerAction=e,this._lastEndTimestamp=0,this._lastTimestamp=0,this.registerIncoming("drag",s,(t=>this._handleDrag(t)))}_handleDrag(t){if("mouse"===t.data.pointerType&&!r(t.data,this.pointerAction))return;const e=t.timestamp-this._lastEndTimestamp,s=40,i=this._momentum&&this._momentum.active&&e<s;switch(t.data.action){case"start":case"update":if(i)break;this._controller&&this._controller.active?t.data.timestamp-this._lastTimestamp>2&&(this._controller.update(t.data),this._lastTimestamp=t.timestamp):this._startController(t);break;case"end":case"removed":this._endController(t,!0);break;case"added":this._endController(t,!1),this._startController(t)}t.stopPropagation()}_endController(t,e){if(this._controller&&this._controller.active){this._lastEndTimestamp=t.timestamp;const s=this._controller.end(t.data);e&&s&&(this._momentum=s,this._view.state.switchCameraController(this._momentum))}this._controller=null}_startController(t){this._controller=this._createController(),this._view.state.switchCameraController(this._controller),this._controller.begin(t.data),this._lastTimestamp=t.timestamp}_createController(){return this._view.state.isGlobal?new t({view:this._view}):new e({view:this._view})}}export{i as PinchAndPanNavigation};