@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.76 kB
JavaScript
import"../../../../core/has.js";import{isNone as e,isSome as r}from"../../../../core/maybe.js";import{c as s}from"../../../../chunks/mat3f32.js";import{brushes as t}from"../brushes.js";import{Container as i}from"../Container.js";import n from"./ClippingInfo.js";import{WGLDrawPhase as o}from"./enums.js";class a extends i{constructor(){super(...arguments),this.name=this.constructor.name}set clips(e){this._clips=e,this.children.forEach((r=>r.clips=e)),this._updateClippingInfo()}beforeRender(e){super.beforeRender(e),this.updateTransforms(e.state)}_createTransforms(){return{dvs:s()}}doRender(e){const r=this.createRenderParams(e),{painter:s,globalOpacity:t,profiler:i,drawPhase:n}=r,a=n===o.LABEL||n===o.HIGHLIGHT?1:t*this.computedOpacity;i.recordContainerStart(this.name),s.beforeRenderLayer(r,this._clippingInfos?255:0,a),this.renderChildren(r),s.compositeLayer(r,a),i.recordContainerEnd()}renderChildren(r){e(this._renderPasses)&&(this._renderPasses=this.prepareRenderPasses(r.painter));for(const e of this._renderPasses)try{e.render(r)}catch(s){}}createRenderParams(e){return e.requireFBO=this.requiresDedicatedFBO,e}prepareRenderPasses(e){return[e.registerRenderPass({name:"clip",brushes:[t.clip],target:()=>this._clippingInfos,drawPhase:o.MAP|o.LABEL|o.LABEL_ALPHA|o.DEBUG|o.HIGHLIGHT})]}updateTransforms(e){for(const r of this.children)r.setTransform(e)}onAttach(){super.onAttach(),this._updateClippingInfo()}onDetach(){super.onDetach(),this._updateClippingInfo()}_updateClippingInfo(){r(this._clippingInfos)&&(this._clippingInfos.forEach((e=>e.destroy())),this._clippingInfos=null);const e=this.stage;if(!e)return;const s=this._clips;r(s)&&s.length&&(this._clippingInfos=s.items.map((r=>n.fromClipArea(e,r)))),this.requestRender()}}export{a as default};