import{createCanvasContext2D}from"../dom.js";import EventTarget from"../events/Target.js";import EventType from"../events/EventType.js";import ImageState from"../ImageState.js";import{shared as iconImageCache}from"./IconImageCache.js";import{listenImage}from"../Image.js";class IconImage extends EventTarget{constructor(t,e,i,a,s,h){super(),this.hitDetectionImage_=null,this.image_=t||new Image,null!==a&&(this.image_.crossOrigin=a),this.canvas_=h?document.createElement("canvas"):null,this.color_=h,this.unlisten_=null,this.imageState_=s,this.size_=i,this.src_=e,this.tainted_}isTainted_(){if(void 0===this.tainted_&&this.imageState_===ImageState.LOADED){this.tainted_=!1;const t=createCanvasContext2D(1,1);try{t.drawImage(this.image_,0,0),t.getImageData(0,0,1,1)}catch(t){this.tainted_=!0}}return!0===this.tainted_}dispatchChangeEvent_(){this.dispatchEvent(EventType.CHANGE)}handleImageError_(){this.imageState_=ImageState.ERROR,this.unlistenImage_(),this.dispatchChangeEvent_()}handleImageLoad_(){this.imageState_=ImageState.LOADED,this.size_&&(this.image_.width=this.size_[0],this.image_.height=this.size_[1]),this.size_=[this.image_.width,this.image_.height],this.unlistenImage_(),this.replaceColor_(),this.dispatchChangeEvent_()}getImage(t){return this.canvas_||this.image_}getImageState(){return this.imageState_}getHitDetectionImage(t){if(!this.hitDetectionImage_)if(this.isTainted_()){var e=this.size_[0],i=this.size_[1];const a=createCanvasContext2D(e,i);a.fillRect(0,0,e,i),this.hitDetectionImage_=a.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_}getSize(){return this.size_}getSrc(){return this.src_}load(){if(this.imageState_==ImageState.IDLE){this.imageState_=ImageState.LOADING;try{this.image_.src=this.src_}catch(t){this.handleImageError_()}this.unlisten_=listenImage(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this))}}replaceColor_(){if(this.color_&&!this.isTainted_()){this.canvas_.width=this.image_.width,this.canvas_.height=this.image_.height;const e=this.canvas_.getContext("2d");e.drawImage(this.image_,0,0);var t=e.getImageData(0,0,this.image_.width,this.image_.height);const h=t.data;var i=this.color_[0]/255,a=this.color_[1]/255,s=this.color_[2]/255;for(let t=0,e=h.length;t<e;t+=4)h[t]*=i,h[t+1]*=a,h[t+2]*=s;e.putImageData(t,0,0)}}unlistenImage_(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}function get(t,e,i,a,s,h){let n=iconImageCache.get(e,a,h);return n||(n=new IconImage(t,e,i,a,s,h),iconImageCache.set(e,a,h,n)),n}export default IconImage;export{get};