@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 4.11 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{ViewingMode as t}from"../../../ViewingMode.js";import{GamepadKeyboardController as i}from"../../state/controllers/GamepadKeyboardController.js";import{InputHandler as e}from"../../../input/InputHandler.js";import{onVisibilityChange as o}from"../../../input/VisibilityChange.js";var n;!function(t){t[t.LEFT=0]="LEFT",t[t.RIGHT=1]="RIGHT",t[t.FORWARD=2]="FORWARD",t[t.BACKWARD=3]="BACKWARD",t[t.UP=4]="UP",t[t.DOWN=5]="DOWN",t[t.HEADINGLEFT=6]="HEADINGLEFT",t[t.HEADINGRIGHT=7]="HEADINGRIGHT",t[t.TILTUP=8]="TILTUP",t[t.TILTDOWN=9]="TILTDOWN",t[t.ZOOMIN=10]="ZOOMIN",t[t.ZOOMOUT=11]="ZOOMOUT"}(n||(n={}));class a extends e{constructor(i,e){super(!0),this._view=i,this._keyToDirection=new Map,this._keyToAction=new Map,this._disableMovements={pan:!0,zoom:!1,ascend:!0,rotate:!1,mode:t.Local},this._stickyKeyTimeoutHandle=void 0,this._stickyKeyDuration=200,this._addKeysMapping(e),this.registerIncoming("key-down",null,(t=>this._handleKeyDown(t))),this.registerIncoming("key-up",null,(t=>this._handleKeyUp(t))),this.registerIncoming("blur",null,(()=>this._handleStop())),this._visibilityHandle=o((t=>t?null:this._handleStop()))}onUninstall(){this._visibilityHandle?.remove(),this._handleStop()}setStickyKeyDuration(t){this._stickyKeyDuration=t}_addKeysMapping(t){this._addKeyMapping(t.pan.left,n.LEFT),this._addKeyMapping(t.pan.right,n.RIGHT),this._addKeyMapping(t.pan.forward,n.FORWARD),this._addKeyMapping(t.pan.backward,n.BACKWARD),this._addKeyMapping(t.pan.up,n.UP),this._addKeyMapping(t.pan.down,n.DOWN),this._addKeyMapping(t.lookAround.headingLeft,n.HEADINGLEFT),this._addKeyMapping(t.lookAround.headingRight,n.HEADINGRIGHT),this._addKeyMapping(t.lookAround.tiltUp,n.TILTUP),this._addKeyMapping(t.lookAround.tiltDown,n.TILTDOWN),this._addKeyMapping(t.zoom.zoomIn,n.ZOOMIN),this._addKeyMapping(t.zoom.zoomOut,n.ZOOMOUT),this._addKeyAction(t.reset.heading,(()=>this._resetHeading())),this._addKeyAction(t.reset.tilt,(()=>this._resetTilt()))}_addKeyMapping(t,i){for(const e of this._eachKey(t))this._keyToDirection.set(e,i)}*_eachKey(t){"string"==typeof t?yield t:yield*t}_addKeyAction(t,i){for(const e of this._eachKey(t))this._keyToAction.set(e,i)}_handleKeyDown(t){if(t.data.native.ctrlKey||t.data.native.metaKey)return;const e=this._keyToAction.get(t.data.key);if(null!=e)return t.stopPropagation(),void e();const o=this._keyToDirection.get(t.data.key);if(null!=o&&(this._cameraControllerKeyboard&&this._cameraControllerKeyboard.running||(this._cameraControllerKeyboard=new i({view:this._view,disableMovements:this._disableMovements}),this._view.state.switchCameraController(this._cameraControllerKeyboard)),this._cameraControllerKeyboard.running)){if(t.stopPropagation(),this._cameraControllerKeyboard.directionActive(o))return;if(this._cameraControllerKeyboard.activateDirection(o),this._cameraControllerKeyboard.countActiveDirections()>1||!this._isPanning(o))return;this._stickyKeyDuration>0&&(this._stickyKeyTimeoutHandle=setTimeout((()=>{this._stickyKeyTimeoutHandle=void 0,null!=this._stickyDirection&&void 0!==this._stickyDirection&&(this._cameraControllerKeyboard?.deactivateDirection(this._stickyDirection),this._stickyDirection=void 0)}),this._stickyKeyDuration))}}_handleStop(){this._cameraControllerKeyboard?.running&&(this._cameraControllerKeyboard.finishController(),this._cameraControllerKeyboard=null)}_handleKeyUp(t){if(t.data.native.ctrlKey||t.data.native.metaKey||!this._cameraControllerKeyboard?.running)return;const i=this._keyToDirection.get(t.data.key);if(null==i)return;t.stopPropagation();const e=void 0===this._stickyKeyTimeoutHandle;void 0===this._stickyKeyTimeoutHandle||1!==this._cameraControllerKeyboard?.countActiveDirections()?(this._cameraControllerKeyboard?.deactivateDirection(i),e&&(this._stickyDirection=void 0)):this._stickyDirection=i}_isPanning(t){return t<=3}_resetHeading(){this._view.goTo({heading:0}).catch((()=>{}))}_resetTilt(){this._view.goTo({tilt:0}).catch((()=>{}))}}export{a as KeyboardNavigation};