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:
8:a460cabc85ac
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 8:a460cabc85ac 1 #ifndef SIMPLEGUI_FONT_RENDERER_H
duncanFrance 8:a460cabc85ac 2 #define SIMPLEGUI_FONT_RENDERER_H
duncanFrance 8:a460cabc85ac 3
duncanFrance 8:a460cabc85ac 4 #include "Font.h"
duncanFrance 8:a460cabc85ac 5 #include "GraphicsDisplay.h"
duncanFrance 8:a460cabc85ac 6 /**
duncanFrance 8:a460cabc85ac 7 * Abstract base class defining the interface for class which can render fonts to a GraphicsDisplay
duncanFrance 8:a460cabc85ac 8 * Should probably use some template wizardy to specify the covariant Font type....
duncanFrance 8:a460cabc85ac 9 **/
duncanFrance 8:a460cabc85ac 10 class FontRenderer {
duncanFrance 8:a460cabc85ac 11 public:
duncanFrance 8:a460cabc85ac 12
duncanFrance 8:a460cabc85ac 13 FontRenderer() : _foreground(0xffff), _background(0)
duncanFrance 8:a460cabc85ac 14
duncanFrance 8:a460cabc85ac 15 {
duncanFrance 8:a460cabc85ac 16 window(0,0,0,0,true);
duncanFrance 8:a460cabc85ac 17 }
duncanFrance 8:a460cabc85ac 18 // You need to implement this..
duncanFrance 8:a460cabc85ac 19 //virtual void setFont(Font* font) =0;
duncanFrance 8:a460cabc85ac 20
duncanFrance 8:a460cabc85ac 21 /**
duncanFrance 8:a460cabc85ac 22 * Render a single character at the current cursor location, advance the cursor
duncanFrance 8:a460cabc85ac 23 * Clip/wrap as necessary
duncanFrance 8:a460cabc85ac 24 **/
duncanFrance 8:a460cabc85ac 25 virtual void putc(const char c, GraphicsDisplay* display, Font* font) =0;
duncanFrance 8:a460cabc85ac 26 /**
duncanFrance 8:a460cabc85ac 27 * Render a string at the current cursor location, advance the cursor
duncanFrance 8:a460cabc85ac 28 * Clip/wrap as necessary
duncanFrance 8:a460cabc85ac 29 **/
duncanFrance 8:a460cabc85ac 30 virtual void puts(const char* s, GraphicsDisplay* display, Font* font) =0;
duncanFrance 8:a460cabc85ac 31
duncanFrance 8:a460cabc85ac 32 void setForeground(uint16_t foreground) {
duncanFrance 8:a460cabc85ac 33 _foreground = foreground;
duncanFrance 8:a460cabc85ac 34 }
duncanFrance 8:a460cabc85ac 35
duncanFrance 8:a460cabc85ac 36 void setBackground(uint16_t background) {
duncanFrance 8:a460cabc85ac 37 _background = background;
duncanFrance 8:a460cabc85ac 38 }
duncanFrance 8:a460cabc85ac 39
duncanFrance 8:a460cabc85ac 40 /**
duncanFrance 8:a460cabc85ac 41 * Sets the window into which to render. placing the cursor at (x,y)
duncanFrance 8:a460cabc85ac 42 **/
duncanFrance 8:a460cabc85ac 43 void window(int x, int y, int width, int height, bool clip) {
duncanFrance 8:a460cabc85ac 44 _wx0 = x;
duncanFrance 8:a460cabc85ac 45 _wy0 = y;
duncanFrance 8:a460cabc85ac 46 _wx1 = x + width;
duncanFrance 8:a460cabc85ac 47 _wy1 = y + height;
duncanFrance 8:a460cabc85ac 48
duncanFrance 8:a460cabc85ac 49 if(_wx0 > _wx1) {
duncanFrance 8:a460cabc85ac 50 int tmp = _wx0;
duncanFrance 8:a460cabc85ac 51 _wx0 = _wx1;
duncanFrance 8:a460cabc85ac 52 _wx1 = tmp;
duncanFrance 8:a460cabc85ac 53 }
duncanFrance 8:a460cabc85ac 54
duncanFrance 8:a460cabc85ac 55 if(_wy0 > _wy1) {
duncanFrance 8:a460cabc85ac 56 int tmp = _wy0;
duncanFrance 8:a460cabc85ac 57 _wy0 = _wy1;
duncanFrance 8:a460cabc85ac 58 _wy1 = tmp;
duncanFrance 8:a460cabc85ac 59 }
duncanFrance 8:a460cabc85ac 60
duncanFrance 8:a460cabc85ac 61 _cx = _wx0;
duncanFrance 8:a460cabc85ac 62 _cy = _wy0;
duncanFrance 8:a460cabc85ac 63 _clip = clip;
duncanFrance 8:a460cabc85ac 64 }
duncanFrance 8:a460cabc85ac 65
duncanFrance 8:a460cabc85ac 66 protected:
duncanFrance 8:a460cabc85ac 67 uint16_t _foreground, _background;
duncanFrance 8:a460cabc85ac 68 int _wx0, _wx1, _wy0, _wy1, _cx, _cy;
duncanFrance 8:a460cabc85ac 69 bool _clip;
duncanFrance 8:a460cabc85ac 70 };
duncanFrance 8:a460cabc85ac 71
duncanFrance 8:a460cabc85ac 72 #endif