Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

Committer:
duncanFrance
Date:
Sun May 22 14:40:29 2016 +0000
Revision:
16:e9a771ecfdbe
Parent:
12:63db16fea709
Child:
18:d849f3ada858
Added vertical alignment control to TextWidget; pumpEvents no longer blocks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 12:63db16fea709 1 #include "GUI.h"
duncanFrance 12:63db16fea709 2
duncanFrance 12:63db16fea709 3 GUI::GUI(GraphicsContext* context) : _context(context), _rootWindow(context)
duncanFrance 12:63db16fea709 4 {}
duncanFrance 12:63db16fea709 5
duncanFrance 12:63db16fea709 6 GraphicsContext* GUI::getGraphicsContext() {
duncanFrance 12:63db16fea709 7 return _context;
duncanFrance 12:63db16fea709 8 }
duncanFrance 12:63db16fea709 9
duncanFrance 12:63db16fea709 10 Window* GUI::rootWindow() {
duncanFrance 12:63db16fea709 11 return &_rootWindow;
duncanFrance 12:63db16fea709 12 }
duncanFrance 12:63db16fea709 13
duncanFrance 12:63db16fea709 14 void GUI::queueEvent(const Event e)
duncanFrance 12:63db16fea709 15 {
duncanFrance 12:63db16fea709 16 Event* qe = _mailbox.alloc();
duncanFrance 12:63db16fea709 17 qe->type = e.type;
duncanFrance 12:63db16fea709 18 qe->target = e.target;
duncanFrance 12:63db16fea709 19 qe->screenX = e.screenX;
duncanFrance 12:63db16fea709 20 qe->screenY = e.screenY;
duncanFrance 12:63db16fea709 21 _mailbox.put(qe);
duncanFrance 12:63db16fea709 22 }
duncanFrance 12:63db16fea709 23
duncanFrance 12:63db16fea709 24 void GUI::pumpEvents()
duncanFrance 12:63db16fea709 25 {
duncanFrance 12:63db16fea709 26
duncanFrance 16:e9a771ecfdbe 27 osEvent oe = _mailbox.get(1);
duncanFrance 12:63db16fea709 28
duncanFrance 12:63db16fea709 29 if(oe.status == osEventMail) {
duncanFrance 12:63db16fea709 30
duncanFrance 12:63db16fea709 31 Event* qe = (Event*)oe.value.p;
duncanFrance 12:63db16fea709 32 Event e;
duncanFrance 12:63db16fea709 33 e.target = qe->target;
duncanFrance 12:63db16fea709 34 e.type = qe->type;
duncanFrance 12:63db16fea709 35 e.screenX = qe->screenX;
duncanFrance 12:63db16fea709 36 e.screenY = qe->screenY;
duncanFrance 12:63db16fea709 37
duncanFrance 12:63db16fea709 38 _context->eventDispatcher()->dispatchEvent(e);
duncanFrance 12:63db16fea709 39 _mailbox.free(qe);
duncanFrance 12:63db16fea709 40 }
duncanFrance 12:63db16fea709 41 }
duncanFrance 12:63db16fea709 42
duncanFrance 12:63db16fea709 43 void GUI::updateWindow()
duncanFrance 12:63db16fea709 44 {
duncanFrance 12:63db16fea709 45 _rootWindow.draw();
duncanFrance 12:63db16fea709 46 }