public void DispatchEvent(exUIControl _sender, string _name, exUIEvent _event) { List <exUIEventListener> listeners = _sender.GetEventListeners(_name); DispatchEvent(_sender, _name, listeners, _event); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ public void DispatchEvent(exUIControl _sender, string _name, List <exUIEventListener> _listeners, exUIEvent _event) { _event.target = _sender; if (_event.bubbles) { List <exUIControl> routine = GetRoutine(_sender); // capture phase if (_listeners != null) { for (int i = 0; i < _listeners.Count; ++i) { exUIEventListener listener = _listeners[i]; if (listener.capturePhase) { _event.eventPhase = exUIEventPhase.Capture; for (int j = routine.Count - 1; j >= 0; --j) { exUIControl sender2 = routine[j]; List <exUIEventListener> listeners2 = sender2.GetEventListeners(_name); _event.currentTarget = sender2; DoDispatchEvent(sender2, listeners2, _event); if (_event.isPropagationStopped) { return; } } } } } // target phase if (_listeners != null) { _event.eventPhase = exUIEventPhase.Target; _event.currentTarget = _sender; DoDispatchEvent(_sender, _listeners, _event); if (_event.isPropagationStopped) { return; } } // bubble phase _event.eventPhase = exUIEventPhase.Bubble; for (int j = 0; j < routine.Count; ++j) { exUIControl sender2 = routine[j]; List <exUIEventListener> listeners2 = sender2.GetEventListeners(_name); _event.currentTarget = sender2; DoDispatchEvent(sender2, listeners2, _event); if (_event.isPropagationStopped) { return; } } } else { _event.eventPhase = exUIEventPhase.Target; _event.currentTarget = _sender; DoDispatchEvent(_sender, _listeners, _event); } }