Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

Committer:
duncanFrance
Date:
Fri Mar 25 18:58:50 2016 +0000
Revision:
2:bb9183379488
Parent:
1:48796b602c86
Child:
3:cb004f59b715
Added Font class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 0:0a590815d51c 1 #include "TextWidget.h"
duncanFrance 0:0a590815d51c 2
duncanFrance 0:0a590815d51c 3 /**
duncanFrance 0:0a590815d51c 4 * A basic widget implementation which just draws some text.
duncanFrance 0:0a590815d51c 5 * If the text does not fit in the bounding-box it will be clipped
duncanFrance 0:0a590815d51c 6 **/
duncanFrance 0:0a590815d51c 7
duncanFrance 0:0a590815d51c 8 TextWidget::TextWidget(GraphicsDisplay* display) : Widget(display) {}
duncanFrance 0:0a590815d51c 9
duncanFrance 1:48796b602c86 10 void TextWidget::setText(char* text)
duncanFrance 1:48796b602c86 11 {
duncanFrance 0:0a590815d51c 12 _text = text;
duncanFrance 0:0a590815d51c 13 }
duncanFrance 0:0a590815d51c 14
duncanFrance 2:bb9183379488 15 void TextWidget::setFont(Font* font)
duncanFrance 1:48796b602c86 16 {
duncanFrance 2:bb9183379488 17 _font = font;
duncanFrance 0:0a590815d51c 18 }
duncanFrance 0:0a590815d51c 19
duncanFrance 1:48796b602c86 20 void TextWidget::draw()
duncanFrance 1:48796b602c86 21 {
duncanFrance 0:0a590815d51c 22
duncanFrance 0:0a590815d51c 23 int right = _x + _width; // right side of clipping window
duncanFrance 1:48796b602c86 24 int bottom = _y + _height; // bottom edge of clipping window
duncanFrance 0:0a590815d51c 25
duncanFrance 0:0a590815d51c 26 int _cx = _x;
duncanFrance 0:0a590815d51c 27 // Start drawing characters at top left
duncanFrance 1:48796b602c86 28 int _cy = _y;
duncanFrance 0:0a590815d51c 29
duncanFrance 0:0a590815d51c 30 char c;
duncanFrance 0:0a590815d51c 31 char *p = _text;
duncanFrance 1:48796b602c86 32
duncanFrance 0:0a590815d51c 33 _display->foreground(_fg);
duncanFrance 0:0a590815d51c 34 _display->background(_bg);
duncanFrance 2:bb9183379488 35 _display->set_font(_font->_font);
duncanFrance 1:48796b602c86 36
duncanFrance 1:48796b602c86 37
duncanFrance 1:48796b602c86 38 while(*p != NULL) {
duncanFrance 0:0a590815d51c 39 c = *p;
duncanFrance 0:0a590815d51c 40 p++;
duncanFrance 0:0a590815d51c 41 if(c=='\n') {
duncanFrance 2:bb9183379488 42 _cy = _cy + _font->_height;
duncanFrance 0:0a590815d51c 43 _cx = _x;
duncanFrance 0:0a590815d51c 44 } else {
duncanFrance 0:0a590815d51c 45 // Only draw the character if it is not clipped
duncanFrance 2:bb9183379488 46 if( (_cx+_font->_width) < right && (_cy +_font->_height) < bottom) {
duncanFrance 0:0a590815d51c 47 _display->character(_cx, _cy, c);
duncanFrance 2:bb9183379488 48 _cx += _font->widthOf(c);
duncanFrance 0:0a590815d51c 49 }
duncanFrance 0:0a590815d51c 50 }
duncanFrance 0:0a590815d51c 51 }
duncanFrance 0:0a590815d51c 52 }
duncanFrance 0:0a590815d51c 53
duncanFrance 1:48796b602c86 54 bool TextWidget::isEventTarget(Event e)
duncanFrance 1:48796b602c86 55 {
duncanFrance 0:0a590815d51c 56 return e.screenX < (_x+_width) && _x <= e.screenX && e.screenY < (_y+_height) && _y <= e.screenY;
duncanFrance 0:0a590815d51c 57 }