Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Core/GUI.cpp@12:63db16fea709, 2016-05-08 (annotated)
- Committer:
- duncanFrance
- Date:
- Sun May 08 14:42:08 2016 +0000
- Revision:
- 12:63db16fea709
- Child:
- 16:e9a771ecfdbe
Update to handle dirty pixels and geometric change/damage
Who changed what in which revision?
User | Revision | Line number | New 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 | 12:63db16fea709 | 27 | osEvent oe = _mailbox.get(); |
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 | } |