el h / SimpleGUI

Fork of SimpleGUI by Duncan McIntyre

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers EventDispatcher.cpp Source File

EventDispatcher.cpp

00001 #include "EventDispatcher.h"
00002 
00003 EventDispatcher::EventDispatcher() {
00004 }
00005 
00006 void EventDispatcher::attachListener(EventListener* l) {
00007     _listeners.appendOnce(l);
00008 }
00009 
00010 void EventDispatcher::detachListener(EventListener* l) {
00011     _listeners.remove(l);
00012 }
00013 
00014 void EventDispatcher::dispatchEvent(Event e) {
00015     EventListener* l;
00016     _listeners.reset();
00017     while((l=_listeners.next()) != NULL) {
00018         l->handleEvent(e);
00019     }
00020 }
00021 
00022 void EventDispatcher::queueEvent(const Event e)
00023 {
00024     Event* qe = _mailbox.alloc();
00025     qe->type = e.type;
00026     qe->target = e.target;
00027     qe->screenX = e.screenX;
00028     qe->screenY = e.screenY;
00029     _mailbox.put(qe);
00030 }
00031 
00032 void EventDispatcher::pumpEvents()
00033 {
00034 
00035     osEvent oe = _mailbox.get(1);
00036 
00037     if(oe.status == osEventMail) {
00038 
00039         Event* qe = (Event*)oe.value.p;
00040         Event e;
00041         e.target = qe->target;
00042         e.type = qe->type;
00043         e.screenX = qe->screenX;
00044         e.screenY = qe->screenY;
00045 
00046         dispatchEvent(e);
00047         _mailbox.free(qe);
00048     }
00049 }