starling-framework
Version:
A fast, productive library for 2D cross-platform development.
215 lines (198 loc) • 6.89 kB
JavaScript
// Class: starling.events.EventDispatcher
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function haxe_ds_StringMap() {return require("./../../haxe/ds/StringMap");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function Reflect() {return require("./../../Reflect");}
function openfl_VectorData() {return $import(require("openfl/Vector"));}
function starling_display_DisplayObject() {return require("./../../starling/display/DisplayObject");}
function js_Boot() {return require("./../../js/Boot");}
function starling_events_Event() {return require("./../../starling/events/Event");}
// Constructor
var EventDispatcher = function() {
this.__eventStack = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
// Meta
EventDispatcher.__name__ = "starling.events.EventDispatcher";
EventDispatcher.__isInterface__ = false;
EventDispatcher.prototype = {
addEventListener: function(type,listener) {
if(listener == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("null listener added"));
}
if(this.__eventListeners == null) {
this.__eventListeners = new (haxe_ds_StringMap().default)();
}
var listeners = this.__eventListeners.get(type);
if(listeners == null) {
var this1 = this.__eventListeners;
var v = (openfl__$Vector_Vector_$Impl_$().default)._new();
this1.set(type,v);
(openfl__$Vector_Vector_$Impl_$().default).push(this.__eventListeners.get(type),listener);
} else {
var _g = 0;
var _g1 = listeners.length;
while(_g < _g1) {
var i = _g++;
if((Reflect().default).compareMethods(listeners[i],listener)) {
return;
}
}
(openfl__$Vector_Vector_$Impl_$().default).set(listeners,listeners.length,listener);
}
},
removeEventListener: function(type,listener) {
if(this.__eventListeners != null) {
var listeners = this.__eventListeners.get(type);
var numListeners = listeners != null ? listeners.length : 0;
if(numListeners > 0) {
var index = (Array.prototype.indexOf.call)(listeners,listener,0);
if(index != -1) {
var this1 = this.__eventStack;
if((Array.prototype.indexOf.call)(this1,type,0) == -1) {
(openfl__$Vector_Vector_$Impl_$().default).removeAt(listeners,index);
} else {
var startIndex = 0;
var endIndex = index;
if(endIndex == null) {
endIndex = 16777215;
}
if(startIndex == null) {
startIndex = 0;
}
var restListeners = (openfl_VectorData().default).ofArray((Array.prototype.slice.call)(listeners,startIndex,endIndex));
var _g = index + 1;
var _g1 = numListeners;
while(_g < _g1) {
var i = _g++;
(openfl__$Vector_Vector_$Impl_$().default).set(restListeners,i - 1,listeners[i]);
}
this.__eventListeners.set(type,restListeners);
}
}
}
}
},
removeEventListeners: function(type) {
if(type != null && this.__eventListeners != null) {
this.__eventListeners.remove(type);
} else {
this.__eventListeners = null;
}
},
dispatchEvent: function(event) {
var bubbles = event.bubbles;
if(!bubbles && (this.__eventListeners == null || !this.__eventListeners.exists(event.type))) {
return;
}
var previousTarget = event.target;
event.setTarget(this);
if(bubbles && ((this) instanceof (starling_display_DisplayObject().default))) {
this.__bubbleEvent(event);
} else {
this.__invokeEvent(event);
}
if(previousTarget != null) {
event.setTarget(previousTarget);
}
},
__invokeEvent: function(event) {
var listeners = this.__eventListeners != null ? this.__eventListeners.get(event.type) : null;
var numListeners = listeners == null ? 0 : listeners.length;
if(numListeners != 0) {
event.setCurrentTarget(this);
(openfl__$Vector_Vector_$Impl_$().default).set(this.__eventStack,this.__eventStack.length,event.type);
var _g = 0;
var _g1 = numListeners;
while(_g < _g1) {
var i = _g++;
var listener = listeners[i];
if(listener == null) {
continue;
}
var numArgs = 2;
if(numArgs == 0) {
listener();
} else if(numArgs == 1) {
listener(event);
} else {
listener(event,event.data);
}
if(event.stopsImmediatePropagation) {
(openfl__$Vector_Vector_$Impl_$().default).pop(this.__eventStack);
return true;
}
}
(openfl__$Vector_Vector_$Impl_$().default).pop(this.__eventStack);
return event.stopsPropagation;
} else {
return false;
}
},
__bubbleEvent: function(event) {
var chain;
var element = (js_Boot().default).__cast(this , (starling_display_DisplayObject().default));
var length = 1;
if(EventDispatcher.sBubbleChains.length > 0) {
chain = EventDispatcher.sBubbleChains.pop();
(openfl__$Vector_Vector_$Impl_$().default).set(chain,0,element);
} else {
chain = (openfl__$Vector_Vector_$Impl_$().default)._new();
(openfl__$Vector_Vector_$Impl_$().default).push(chain,element);
}
while(true) {
element = element.get_parent();
if(!(element != null)) {
break;
}
(openfl__$Vector_Vector_$Impl_$().default).set(chain,length++,element);
}
var _g = 0;
var _g1 = length;
while(_g < _g1) {
var i = _g++;
if(chain[i] == null) {
continue;
}
var stopPropagation = chain[i].__invokeEvent(event);
if(stopPropagation) {
break;
}
}
chain.length = 0;
EventDispatcher.sBubbleChains[EventDispatcher.sBubbleChains.length] = chain;
},
dispatchEventWith: function(type,bubbles,data) {
if(bubbles == null) {
bubbles = false;
}
if(bubbles || this.hasEventListener(type)) {
var event = (starling_events_Event().default).fromPool(type,bubbles,data);
this.dispatchEvent(event);
(starling_events_Event().default).toPool(event);
}
},
hasEventListener: function(type,listener) {
var listeners = this.__eventListeners != null ? this.__eventListeners.get(type) : null;
if(listeners == null) {
return false;
} else if(listener != null) {
return (Array.prototype.indexOf.call)(listeners,listener,0) != -1;
} else {
return listeners.length != 0;
}
}
};
EventDispatcher.prototype.__class__ = EventDispatcher.prototype.constructor = $hxClasses["starling.events.EventDispatcher"] = EventDispatcher;
// Init
// Statics
EventDispatcher.sBubbleChains = []
// Export
exports.default = EventDispatcher;