Example #1
0
    public void DispatchEvent(exUIControl _sender, string _name, exUIEvent _event)
    {
        List <exUIEventListener> listeners = _sender.GetEventListeners(_name);

        DispatchEvent(_sender, _name, listeners, _event);
    }
Example #2
0
    // ------------------------------------------------------------------
    // 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);
        }
    }