ViewOverlay.js 3.1 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{_ as t}from"../../chunks/tslib.es6.js";import e from"../../core/Accessor.js";import r from"../../core/Collection.js";import{property as o}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../core/accessorSupport/decorators/subclass.js";import{WatchUpdatingTracking as i}from"../../core/support/WatchUpdatingTracking.js";import"../../libs/maquette/projection.js";import{createProjector as n}from"../../libs/maquette/projector.js";let a=class extends e{constructor(){super(...arguments),this.items=new r,this._watchUpdatingTracking=new i,this._callbacks=new Map,this._projector=n(),this._hiddenProjector=n()}get needsRender(){return this.items.length>0}get updating(){return this._watchUpdatingTracking?.updating??!1}initialize(){const t=document.createElement("div");t.className="esri-overlay-surface",this._set("surface",t),this._hiddenSurface=document.createElement("div"),this._hiddenSurface.setAttribute("style","visibility: hidden;"),t.appendChild(this._hiddenSurface),this._watchUpdatingTracking.addOnCollectionChange((()=>this.items),(t=>{for(const e of t.added){const t=()=>e.render();this._callbacks.set(e,t),this._projector.append(this.surface,t)}for(const e of t.removed){const t=this._projector.detach(this._callbacks.get(e));this.surface.removeChild(t.domNode),this._callbacks.delete(e)}}))}addItem(t){this.items.add(t)}removeItem(t){this.items.remove(t)}destroy(){this.items.removeAll(),this._callbacks.forEach((t=>this._projector.detach(t))),this._callbacks=null,this._projector=null,this._watchUpdatingTracking.destroy()}render(){this._projector.renderNow()}computeBoundingRect(t){const e=this._hiddenSurface,r=this._hiddenProjector;let o=null;const s=()=>(o=t.render(),o);r.append(e,s),r.renderNow();const i={left:0,top:0,right:0,bottom:0};if(o&&o.domNode){const t=o.domNode.getBoundingClientRect();i.left=t.left,i.top=t.top,i.right=t.right,i.bottom=t.bottom}for(r.detach(s);e.firstChild;)e.removeChild(e.firstChild);return i}overlaps(t,e){const r=this.computeBoundingRect(t),o=this.computeBoundingRect(e);return Math.max(r.left,o.left)<=Math.min(r.right,o.right)&&Math.max(r.top,o.top)<=Math.min(r.bottom,o.bottom)}get hasVisibleItems(){return this.items.some((t=>t.visible))}async prepare(){await document.fonts.load(this._fontString()).catch((()=>{}))}renderCanvas(t){if(!this.items.some((t=>t.visible)))return;const e=t.getContext("2d");e.save(),e.font=this._fontString(),this.items.forEach((t=>{e.save(),t.renderCanvas(e),e.restore()})),e.restore()}_fontString(){return`10px ${getComputedStyle(this.surface).fontFamily}`}};t([o({readOnly:!0})],a.prototype,"surface",void 0),t([o({readOnly:!0})],a.prototype,"items",void 0),t([o({readOnly:!0})],a.prototype,"needsRender",null),t([o({readOnly:!0})],a.prototype,"_watchUpdatingTracking",void 0),t([o({readOnly:!0})],a.prototype,"updating",null),a=t([s("esri.views.overlay.ViewOverlay")],a);const c=a;export{c as default};