diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 8255bab..70eb4cd 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -19,8 +19,6 @@ */ PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); - /** * [read-only] The width of the base texture set when the image has loaded * @@ -123,6 +121,7 @@ }; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); /** * Destroys this base texture diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 8255bab..70eb4cd 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -19,8 +19,6 @@ */ PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); - /** * [read-only] The width of the base texture set when the image has loaded * @@ -123,6 +121,7 @@ }; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); /** * Destroys this base texture diff --git a/src/pixi/textures/RenderTexture.js b/src/pixi/textures/RenderTexture.js index e16c420..0c9cd38 100644 --- a/src/pixi/textures/RenderTexture.js +++ b/src/pixi/textures/RenderTexture.js @@ -33,8 +33,6 @@ */ PIXI.RenderTexture = function(width, height, renderer, scaleMode) { - PIXI.EventTarget.call( this ); - /** * The with of the render texture * @@ -100,6 +98,7 @@ PIXI.RenderTexture.prototype = Object.create(PIXI.Texture.prototype); PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; +PIXI.EventTarget.mixin(PIXI.RenderTexture.prototype); /** * Resize the RenderTexture. diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 8255bab..70eb4cd 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -19,8 +19,6 @@ */ PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); - /** * [read-only] The width of the base texture set when the image has loaded * @@ -123,6 +121,7 @@ }; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); /** * Destroys this base texture diff --git a/src/pixi/textures/RenderTexture.js b/src/pixi/textures/RenderTexture.js index e16c420..0c9cd38 100644 --- a/src/pixi/textures/RenderTexture.js +++ b/src/pixi/textures/RenderTexture.js @@ -33,8 +33,6 @@ */ PIXI.RenderTexture = function(width, height, renderer, scaleMode) { - PIXI.EventTarget.call( this ); - /** * The with of the render texture * @@ -100,6 +98,7 @@ PIXI.RenderTexture.prototype = Object.create(PIXI.Texture.prototype); PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; +PIXI.EventTarget.mixin(PIXI.RenderTexture.prototype); /** * Resize the RenderTexture. diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 50e8961..d88c846 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -19,8 +19,6 @@ */ PIXI.Texture = function(baseTexture, frame) { - PIXI.EventTarget.call( this ); - if(!frame) { this.noFrame = true; @@ -80,6 +78,7 @@ }; PIXI.Texture.prototype.constructor = PIXI.Texture; +PIXI.EventTarget.mixin(PIXI.Texture.prototype); /** * Called when the base texture is loaded diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 8255bab..70eb4cd 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -19,8 +19,6 @@ */ PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); - /** * [read-only] The width of the base texture set when the image has loaded * @@ -123,6 +121,7 @@ }; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); /** * Destroys this base texture diff --git a/src/pixi/textures/RenderTexture.js b/src/pixi/textures/RenderTexture.js index e16c420..0c9cd38 100644 --- a/src/pixi/textures/RenderTexture.js +++ b/src/pixi/textures/RenderTexture.js @@ -33,8 +33,6 @@ */ PIXI.RenderTexture = function(width, height, renderer, scaleMode) { - PIXI.EventTarget.call( this ); - /** * The with of the render texture * @@ -100,6 +98,7 @@ PIXI.RenderTexture.prototype = Object.create(PIXI.Texture.prototype); PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; +PIXI.EventTarget.mixin(PIXI.RenderTexture.prototype); /** * Resize the RenderTexture. diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 50e8961..d88c846 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -19,8 +19,6 @@ */ PIXI.Texture = function(baseTexture, frame) { - PIXI.EventTarget.call( this ); - if(!frame) { this.noFrame = true; @@ -80,6 +78,7 @@ }; PIXI.Texture.prototype.constructor = PIXI.Texture; +PIXI.EventTarget.mixin(PIXI.Texture.prototype); /** * Called when the base texture is loaded diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index a134425..bc80253 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -138,11 +138,11 @@ return this; var list = _listeners[eventName], - length = list.length; + i = list.length = fn ? list.length : 0; - for(var i = 0; i < length; ++i) { + while(i-- > 0) { if(list[i] === fn || list[i]._originalHandler === fn) { - list.splice(i--, 1); + list.splice(i, 1); } } diff --git a/src/pixi/textures/BaseTexture.js b/src/pixi/textures/BaseTexture.js index 8255bab..70eb4cd 100644 --- a/src/pixi/textures/BaseTexture.js +++ b/src/pixi/textures/BaseTexture.js @@ -19,8 +19,6 @@ */ PIXI.BaseTexture = function(source, scaleMode) { - PIXI.EventTarget.call( this ); - /** * [read-only] The width of the base texture set when the image has loaded * @@ -123,6 +121,7 @@ }; PIXI.BaseTexture.prototype.constructor = PIXI.BaseTexture; +PIXI.EventTarget.mixin(PIXI.BaseTexture.prototype); /** * Destroys this base texture diff --git a/src/pixi/textures/RenderTexture.js b/src/pixi/textures/RenderTexture.js index e16c420..0c9cd38 100644 --- a/src/pixi/textures/RenderTexture.js +++ b/src/pixi/textures/RenderTexture.js @@ -33,8 +33,6 @@ */ PIXI.RenderTexture = function(width, height, renderer, scaleMode) { - PIXI.EventTarget.call( this ); - /** * The with of the render texture * @@ -100,6 +98,7 @@ PIXI.RenderTexture.prototype = Object.create(PIXI.Texture.prototype); PIXI.RenderTexture.prototype.constructor = PIXI.RenderTexture; +PIXI.EventTarget.mixin(PIXI.RenderTexture.prototype); /** * Resize the RenderTexture. diff --git a/src/pixi/textures/Texture.js b/src/pixi/textures/Texture.js index 50e8961..d88c846 100644 --- a/src/pixi/textures/Texture.js +++ b/src/pixi/textures/Texture.js @@ -19,8 +19,6 @@ */ PIXI.Texture = function(baseTexture, frame) { - PIXI.EventTarget.call( this ); - if(!frame) { this.noFrame = true; @@ -80,6 +78,7 @@ }; PIXI.Texture.prototype.constructor = PIXI.Texture; +PIXI.EventTarget.mixin(PIXI.Texture.prototype); /** * Called when the base texture is loaded diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index a134425..bc80253 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -138,11 +138,11 @@ return this; var list = _listeners[eventName], - length = list.length; + i = list.length = fn ? list.length : 0; - for(var i = 0; i < length; ++i) { + while(i-- > 0) { if(list[i] === fn || list[i]._originalHandler === fn) { - list.splice(i--, 1); + list.splice(i, 1); } } diff --git a/test/unit/pixi/utils/EventTarget.js b/test/unit/pixi/utils/EventTarget.js index feabba3..b94509e 100644 --- a/test/unit/pixi/utils/EventTarget.js +++ b/test/unit/pixi/utils/EventTarget.js @@ -197,4 +197,31 @@ expect(called).to.equal(5); }); + + it('is backwards compatible with older dispatchEvent', function () { + var called = 0, + obj = {}; + + EventTarget.mixin(obj); + + function onMyEvent() { + called++; + } + + obj.on('myevent1', onMyEvent); + obj.on('myevent2', onMyEvent); + obj.on('myevent3', onMyEvent); + + obj.emit({ type: 'myevent1' }); + obj.emit({ type: 'myevent2' }); + obj.emit({ type: 'myevent3' }); + + obj.off('myevent2', onMyEvent); + + obj.emit({ type: 'myevent1' }); + obj.emit({ type: 'myevent2' }); + obj.emit({ type: 'myevent3' }); + + expect(called).to.equal(5); + }); });