Foundation classes for a basic GUI implementing simple widgets and events
Dependents: TouchScreenGUIDemo
Widgets/TextWidget.cpp@2:bb9183379488, 2016-03-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |