var __extends=this&&this.__extends||function(){var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};return function(t,e){function i(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}}();import EventTarget from"../events/Target.js";import EventType from"../events/EventType.js";import ImageState from"../ImageState.js";import{createCanvasContext2D}from"../dom.js";import{shared as iconImageCache}from"./IconImageCache.js";import{listenImage}from"../Image.js";var taintedTestContext=null,IconImage=function(r){function t(t,e,i,a,n,o){var s=r.call(this)||this;return s.hitDetectionImage_=null,s.image_=t||new Image,null!==a&&(s.image_.crossOrigin=a),s.canvas_={},s.color_=o,s.unlisten_=null,s.imageState_=n,s.size_=i,s.src_=e,s.tainted_,s}return __extends(t,r),t.prototype.isTainted_=function(){if(void 0===this.tainted_&&this.imageState_===ImageState.LOADED){(taintedTestContext=taintedTestContext||createCanvasContext2D(1,1)).drawImage(this.image_,0,0);try{taintedTestContext.getImageData(0,0,1,1),this.tainted_=!1}catch(t){taintedTestContext=null,this.tainted_=!0}}return!0===this.tainted_},t.prototype.dispatchChangeEvent_=function(){this.dispatchEvent(EventType.CHANGE)},t.prototype.handleImageError_=function(){this.imageState_=ImageState.ERROR,this.unlistenImage_(),this.dispatchChangeEvent_()},t.prototype.handleImageLoad_=function(){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.dispatchChangeEvent_()},t.prototype.getImage=function(t){return this.replaceColor_(t),this.canvas_[t]||this.image_},t.prototype.getPixelRatio=function(t){return this.replaceColor_(t),this.canvas_[t]?t:1},t.prototype.getImageState=function(){return this.imageState_},t.prototype.getHitDetectionImage=function(){var t,e,i;return this.hitDetectionImage_||(this.isTainted_()?(t=this.size_[0],e=this.size_[1],(i=createCanvasContext2D(t,e)).fillRect(0,0,t,e),this.hitDetectionImage_=i.canvas):this.hitDetectionImage_=this.image_),this.hitDetectionImage_},t.prototype.getSize=function(){return this.size_},t.prototype.getSrc=function(){return this.src_},t.prototype.load=function(){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))}},t.prototype.replaceColor_=function(t){if(this.color_&&!this.canvas_[t]){var e=document.createElement("canvas"),i=((this.canvas_[t]=e).width=Math.ceil(this.image_.width*t),e.height=Math.ceil(this.image_.height*t),e.getContext("2d"));if(i.scale(t,t),i.drawImage(this.image_,0,0),this.isTainted_())return t=this.color_,i.globalCompositeOperation="multiply",i.fillStyle="rgb("+t[0]+","+t[1]+","+t[2]+")",i.fillRect(0,0,e.width,e.height),i.globalCompositeOperation="destination-in",void i.drawImage(this.image_,0,0);for(var t=i.getImageData(0,0,e.width,e.height),a=t.data,n=this.color_[0]/255,o=this.color_[1]/255,s=this.color_[2]/255,r=0,h=a.length;r<h;r+=4)a[r]*=n,a[r+1]*=o,a[r+2]*=s;i.putImageData(t,0,0)}},t.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)},t}(EventTarget);function get(t,e,i,a,n,o){var s=iconImageCache.get(e,a,o);return s||(s=new IconImage(t,e,i,a,n,o),iconImageCache.set(e,a,o,s)),s}export default IconImage;export{get};