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

Fork of SimpleGUI by Duncan McIntyre

Committer:
elh
Date:
Tue Oct 18 19:43:15 2016 +0000
Revision:
20:ef07d42ea062
Parent:
18:d849f3ada858
Initialize Textwidgets _text to NULL preventing crash if widget is draw until a text was set.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 0:0a590815d51c 1 #include "EventDispatcher.h"
duncanFrance 0:0a590815d51c 2
duncanFrance 0:0a590815d51c 3 EventDispatcher::EventDispatcher() {
duncanFrance 0:0a590815d51c 4 }
duncanFrance 0:0a590815d51c 5
duncanFrance 0:0a590815d51c 6 void EventDispatcher::attachListener(EventListener* l) {
duncanFrance 15:e69fd74d42e4 7 _listeners.appendOnce(l);
duncanFrance 0:0a590815d51c 8 }
duncanFrance 0:0a590815d51c 9
duncanFrance 0:0a590815d51c 10 void EventDispatcher::detachListener(EventListener* l) {
duncanFrance 12:63db16fea709 11 _listeners.remove(l);
duncanFrance 0:0a590815d51c 12 }
duncanFrance 0:0a590815d51c 13
duncanFrance 0:0a590815d51c 14 void EventDispatcher::dispatchEvent(Event e) {
duncanFrance 12:63db16fea709 15 EventListener* l;
duncanFrance 12:63db16fea709 16 _listeners.reset();
duncanFrance 12:63db16fea709 17 while((l=_listeners.next()) != NULL) {
duncanFrance 18:d849f3ada858 18 l->handleEvent(e);
duncanFrance 0:0a590815d51c 19 }
duncanFrance 18:d849f3ada858 20 }
duncanFrance 18:d849f3ada858 21
duncanFrance 18:d849f3ada858 22 void EventDispatcher::queueEvent(const Event e)
duncanFrance 18:d849f3ada858 23 {
duncanFrance 18:d849f3ada858 24 Event* qe = _mailbox.alloc();
duncanFrance 18:d849f3ada858 25 qe->type = e.type;
duncanFrance 18:d849f3ada858 26 qe->target = e.target;
duncanFrance 18:d849f3ada858 27 qe->screenX = e.screenX;
duncanFrance 18:d849f3ada858 28 qe->screenY = e.screenY;
duncanFrance 18:d849f3ada858 29 _mailbox.put(qe);
duncanFrance 18:d849f3ada858 30 }
duncanFrance 18:d849f3ada858 31
duncanFrance 18:d849f3ada858 32 void EventDispatcher::pumpEvents()
duncanFrance 18:d849f3ada858 33 {
duncanFrance 18:d849f3ada858 34
duncanFrance 18:d849f3ada858 35 osEvent oe = _mailbox.get(1);
duncanFrance 18:d849f3ada858 36
duncanFrance 18:d849f3ada858 37 if(oe.status == osEventMail) {
duncanFrance 18:d849f3ada858 38
duncanFrance 18:d849f3ada858 39 Event* qe = (Event*)oe.value.p;
duncanFrance 18:d849f3ada858 40 Event e;
duncanFrance 18:d849f3ada858 41 e.target = qe->target;
duncanFrance 18:d849f3ada858 42 e.type = qe->type;
duncanFrance 18:d849f3ada858 43 e.screenX = qe->screenX;
duncanFrance 18:d849f3ada858 44 e.screenY = qe->screenY;
duncanFrance 18:d849f3ada858 45
duncanFrance 18:d849f3ada858 46 dispatchEvent(e);
duncanFrance 18:d849f3ada858 47 _mailbox.free(qe);
duncanFrance 18:d849f3ada858 48 }
duncanFrance 18:d849f3ada858 49 }