Foundation classes for a basic GUI implementing simple widgets and events. (Fork for custom changes.)

Fork of SimpleGUI by Duncan McIntyre

Events/EventDispatcher.cpp

Committer:
elh
Date:
2016-10-18
Revision:
20:ef07d42ea062
Parent:
18:d849f3ada858

File content as of revision 20:ef07d42ea062:

#include "EventDispatcher.h"

EventDispatcher::EventDispatcher() {
}

void EventDispatcher::attachListener(EventListener* l) {
    _listeners.appendOnce(l);
}

void EventDispatcher::detachListener(EventListener* l) {
    _listeners.remove(l);
}

void EventDispatcher::dispatchEvent(Event e) {
    EventListener* l;
    _listeners.reset();
    while((l=_listeners.next()) != NULL) {
        l->handleEvent(e);
    }
}

void EventDispatcher::queueEvent(const Event e)
{
    Event* qe = _mailbox.alloc();
    qe->type = e.type;
    qe->target = e.target;
    qe->screenX = e.screenX;
    qe->screenY = e.screenY;
    _mailbox.put(qe);
}

void EventDispatcher::pumpEvents()
{

    osEvent oe = _mailbox.get(1);

    if(oe.status == osEventMail) {

        Event* qe = (Event*)oe.value.p;
        Event e;
        e.target = qe->target;
        e.type = qe->type;
        e.screenX = qe->screenX;
        e.screenY = qe->screenY;

        dispatchEvent(e);
        _mailbox.free(qe);
    }
}