12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import"../../core/has.js";import{rad2deg as t}from"../../core/mathUtils.js";import{createScreenPoint as e}from"../../core/screenUtils.js";import{InputHandler as a}from"./InputHandler.js";import{ViewEventPriorities as n}from"./InputManager.js";export{MouseButton}from"./IViewEvents.js";const r=["click","double-click","immediate-click","immediate-double-click","hold","drag","key-down","key-up","pointer-down","pointer-move","pointer-up","pointer-drag","mouse-wheel","pointer-enter","pointer-leave","gamepad","focus","blur"],i={};function o(t){return!!i[t]}function s(t){for(const e of t)if(!o(e))return!1;return!0}r.forEach((t=>{i[t]=!0}));class p{constructor(t){this._handlers=new Map,this._counter=0,this._handlerCounts=new Map,this.view=t,this.inputManager=null}connect(t){t&&this.disconnect(),this.inputManager=t,this._handlers.forEach((({handler:t,priority:e},a)=>this.inputManager.installHandlers(a,[t],e)))}disconnect(){this.inputManager&&this._handlers.forEach(((t,e)=>this.inputManager.uninstallHandlers(e))),this.inputManager=null}destroy(){this.disconnect(),this._handlers.clear(),this.view=null}on(t,e,a,r){const i=Array.isArray(t)?t:t.split(",");if(!s(i))return i.some(o)&&console.error("Error: registering input events and other events on the view at the same time is not supported."),null;let p,l;Array.isArray(e)?l=e:(p=e,l=[]),"function"==typeof a?p=a:r=a,r=null!=r?r:n.DEFAULT;const u=this._createUniqueGroupName(),m=new c(this.view,i,l,p);this._handlers.set(u,{handler:m,priority:r});for(const n of i){const t=this._handlerCounts.get(n)||0;this._handlerCounts.set(n,t+1)}return this.inputManager&&this.inputManager.installHandlers(u,[m],r),{remove:()=>this._removeHandler(u,i)}}hasHandler(t){return!!this._handlerCounts.get(t)}_removeHandler(t,e){if(this._handlers.has(t)){this._handlers.delete(t);for(const t of e){const e=this._handlerCounts.get(t);void 0===e?console.error("Trying to remove handler for event that has no handlers registered: ",t):1===e?this._handlerCounts.delete(t):this._handlerCounts.set(t,e-1)}}this.inputManager&&this.inputManager.uninstallHandlers(t)}_createUniqueGroupName(){return this._counter+=1,`viewEvents_${this._counter}`}}class c extends a{constructor(t,e,a,n){super(!0),this.view=t;for(const r of e)switch(r){case"click":this.registerIncoming("click",a,(t=>n(this._wrapClick(t))));break;case"double-click":this.registerIncoming("double-click",a,(t=>n(this._wrapDoubleClick(t))));break;case"immediate-click":this.registerIncoming("immediate-click",a,(t=>n(this._wrapImmediateClick(t))));break;case"immediate-double-click":this.registerIncoming("immediate-double-click",a,(t=>n(this._wrapImmediateDoubleClick(t))));break;case"hold":this.registerIncoming("hold",a,(t=>n(this._wrapHold(t))));break;case"drag":this.registerIncoming("drag",a,(t=>{const e=this._wrapDrag(t);e&&n(e)}));break;case"key-down":this.registerIncoming("key-down",a,(t=>n(this._wrapKeyDown(t))));break;case"key-up":this.registerIncoming("key-up",a,(t=>n(this._wrapKeyUp(t))));break;case"pointer-down":this.registerIncoming("pointer-down",a,(t=>n(this._wrapPointer(t,"pointer-down"))));break;case"pointer-move":this.registerIncoming("pointer-move",a,(t=>n(this._wrapPointer(t,"pointer-move"))));break;case"pointer-up":this.registerIncoming("pointer-up",a,(t=>n(this._wrapPointer(t,"pointer-up"))));break;case"pointer-drag":this.registerIncoming("pointer-drag",a,(t=>n(this._wrapPointerDrag(t))));break;case"mouse-wheel":this.registerIncoming("mouse-wheel",a,(t=>n(this._wrapMouseWheel(t))));break;case"pointer-enter":this.registerIncoming("pointer-enter",a,(t=>n(this._wrapPointer(t,"pointer-enter"))));break;case"pointer-leave":this.registerIncoming("pointer-leave",a,(t=>n(this._wrapPointer(t,"pointer-leave"))));break;case"gamepad":this.registerIncoming("gamepad",a,(t=>{n(this._wrapGamepad(t))}));break;case"focus":this.registerIncoming("focus",a,(t=>{n(this._wrapFocus(t))}));break;case"blur":this.registerIncoming("blur",a,(t=>{n(this._wrapBlur(t))}))}}_wrapFocus(t){return{type:"focus",timestamp:t.timestamp,native:t.data.native,cancelable:t.cancelable,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapBlur(t){return{type:"blur",timestamp:t.timestamp,native:t.data.native,cancelable:t.cancelable,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapClick(t){const{pointerType:a,button:n,buttons:r,x:i,y:o,native:s,eventId:p}=t.data,{cancelable:c,timestamp:l}=t;return{type:"click",pointerType:a,button:n,buttons:r,x:i,y:o,native:s,timestamp:l,screenPoint:e(i,o),mapPoint:this._getMapPoint(i,o),eventId:p,cancelable:c,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapDoubleClick(t){const{pointerType:e,button:a,buttons:n,x:r,y:i,native:o,eventId:s}=t.data,{cancelable:p,timestamp:c}=t;return{type:"double-click",pointerType:e,button:a,buttons:n,x:r,y:i,native:o,timestamp:c,mapPoint:this._getMapPoint(r,i),eventId:s,cancelable:p,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapImmediateClick(t){const{pointerType:e,button:a,buttons:n,x:r,y:i,native:o,eventId:s}=t.data,p=o.pointerId,{cancelable:c,timestamp:l}=t;return{type:"immediate-click",pointerId:p,pointerType:e,button:a,buttons:n,x:r,y:i,native:o,timestamp:l,mapPoint:this._getMapPoint(r,i),eventId:s,cancelable:c,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapImmediateDoubleClick(t){const{pointerType:e,button:a,buttons:n,x:r,y:i,native:o,eventId:s}=t.data,p=o.pointerId,{cancelable:c,timestamp:l}=t;return{type:"immediate-double-click",pointerId:p,pointerType:e,button:a,buttons:n,x:r,y:i,native:o,timestamp:l,mapPoint:this._getMapPoint(r,i),eventId:s,cancelable:c,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapHold(t){const{pointerType:e,button:a,buttons:n,x:r,y:i,native:o}=t.data,{cancelable:s,timestamp:p}=t;return{type:"hold",pointerType:e,button:a,buttons:n,x:r,y:i,native:o,timestamp:p,mapPoint:this._getMapPoint(r,i),cancelable:s,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_getMapPoint(t,a){return this.view.toMap(e(t,a),{exclude:[]})}_wrapDrag(e){const a=e.data,{x:n,y:r}=a.center,{action:i,pointerType:o,button:s}=a;if("start"===i&&(this._latestDragStart=a),!this._latestDragStart)return;const p=a.pointer.native,c=a.buttons,{cancelable:l,timestamp:u}=e,m={x:this._latestDragStart.center.x,y:this._latestDragStart.center.y};return"end"===i&&(this._latestDragStart=void 0),{type:"drag",action:i,x:n,y:r,origin:m,pointerType:o,button:s,buttons:c,radius:a.radius,angle:t(a.angle),native:p,timestamp:u,cancelable:l,stopPropagation:()=>e.stopPropagation(),async:t=>e.async(t),preventDefault:()=>e.preventDefault()}}_wrapKeyDown(t){const{key:e,repeat:a,native:n}=t.data,{cancelable:r,timestamp:i}=t;return{type:"key-down",key:e,repeat:a,native:n,timestamp:i,cancelable:r,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapKeyUp(t){const{key:e,native:a}=t.data,{cancelable:n,timestamp:r}=t;return{type:"key-up",key:e,native:a,timestamp:r,cancelable:n,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapPointer(t,e){const{x:a,y:n,button:r,buttons:i,native:o,eventId:s}=t.data,p=o.pointerId,c=o.pointerType,{cancelable:l,timestamp:u}=t;return{type:e,x:a,y:n,pointerId:p,pointerType:c,button:r,buttons:i,native:o,timestamp:u,eventId:s,cancelable:l,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapPointerDrag(t){const{x:e,y:a,buttons:n,native:r,eventId:i}=t.data.currentEvent,{button:o}=t.data.startEvent,s=t.data.startEvent.native.pointerId,p=t.data.startEvent.native.pointerType,c=t.data.action,l={x:t.data.startEvent.x,y:t.data.startEvent.y},{cancelable:u,timestamp:m}=t;return{type:"pointer-drag",x:e,y:a,pointerId:s,pointerType:p,button:o,buttons:n,action:c,origin:l,native:r,timestamp:m,eventId:i,cancelable:u,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapMouseWheel(t){const{cancelable:e,data:a,timestamp:n}=t,{x:r,y:i,deltaY:o,native:s}=a;return{type:"mouse-wheel",x:r,y:i,deltaY:o,native:s,timestamp:n,cancelable:e,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}_wrapGamepad(t){const{action:e,state:a,device:n}=t.data,{cancelable:r,timestamp:i}=t,{buttons:o,axes:s}=a;return{type:"gamepad",device:n,timestamp:i,action:e,buttons:o,axes:s,cancelable:r,stopPropagation:()=>t.stopPropagation(),async:e=>t.async(e),preventDefault:()=>t.preventDefault()}}}export{p as ViewEvents,r as eventTypes};
|