Foundation classes for a basic GUI implementing simple widgets and events. (Fork for custom changes.)
Fork of SimpleGUI by
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); } }