el h / SimpleGUI

Fork of SimpleGUI by Duncan McIntyre

Committer:
duncanFrance
Date:
Sun May 22 14:40:29 2016 +0000
Revision:
16:e9a771ecfdbe
Parent:
13:6714534e7974
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 0:0a590815d51c 1 #ifndef SIMPLEGUI_WIDGET_H
duncanFrance 0:0a590815d51c 2 #define SIMPLEGUI_WIDGET_H
duncanFrance 0:0a590815d51c 3
duncanFrance 12:63db16fea709 4 class Widget;
duncanFrance 12:63db16fea709 5
duncanFrance 12:63db16fea709 6 #include "GraphicsContext.h"
duncanFrance 12:63db16fea709 7 #include "EventListener.h"
duncanFrance 12:63db16fea709 8 #include "Rectangle.h"
duncanFrance 13:6714534e7974 9 #include "Point.h"
duncanFrance 0:0a590815d51c 10
duncanFrance 0:0a590815d51c 11 /**
duncanFrance 0:0a590815d51c 12 * A basic widget draws itself in a rectangular area
duncanFrance 0:0a590815d51c 13 **/
duncanFrance 0:0a590815d51c 14
duncanFrance 12:63db16fea709 15 class Widget : public EventListener
duncanFrance 12:63db16fea709 16 {
duncanFrance 12:63db16fea709 17
duncanFrance 12:63db16fea709 18 public:
duncanFrance 12:63db16fea709 19
duncanFrance 12:63db16fea709 20 Widget(GraphicsContext* context);
duncanFrance 12:63db16fea709 21
duncanFrance 12:63db16fea709 22 virtual void setParent(Widget* parent);
duncanFrance 16:e9a771ecfdbe 23 virtual Widget *getParent();
duncanFrance 12:63db16fea709 24
duncanFrance 12:63db16fea709 25 /********************************************************
duncanFrance 12:63db16fea709 26 * Methods relating to containment
duncanFrance 12:63db16fea709 27 * In the base class these methods do nothing.
duncanFrance 12:63db16fea709 28 * They are implemented in container classes
duncanFrance 12:63db16fea709 29 ********************************************************/
duncanFrance 12:63db16fea709 30 virtual void attach(Widget *widget) {}
duncanFrance 12:63db16fea709 31 virtual void detach(Widget *widget) {}
duncanFrance 12:63db16fea709 32
duncanFrance 12:63db16fea709 33 /********************************************************
duncanFrance 12:63db16fea709 34 * Common Widget methods
duncanFrance 12:63db16fea709 35 ********************************************************/
duncanFrance 12:63db16fea709 36 virtual bool isEventTarget(Event e);
duncanFrance 0:0a590815d51c 37
duncanFrance 12:63db16fea709 38 virtual void setLocation(int x, int y);
duncanFrance 12:63db16fea709 39 virtual void setSize(int width, int height);
duncanFrance 12:63db16fea709 40 virtual void setWidth(int width);
duncanFrance 12:63db16fea709 41 virtual void setHeight(int height);
duncanFrance 12:63db16fea709 42 virtual int x();
duncanFrance 12:63db16fea709 43 virtual int y();
duncanFrance 12:63db16fea709 44 virtual int height();
duncanFrance 12:63db16fea709 45 virtual int width();
duncanFrance 13:6714534e7974 46
duncanFrance 13:6714534e7974 47 virtual void setOffset(int x, int y);
duncanFrance 13:6714534e7974 48 virtual int offsetX();
duncanFrance 13:6714534e7974 49 virtual int offsetY();
duncanFrance 12:63db16fea709 50
duncanFrance 12:63db16fea709 51 virtual void setForeground(uint16_t color);
duncanFrance 12:63db16fea709 52 virtual void setBackground(uint16_t color);
duncanFrance 12:63db16fea709 53
duncanFrance 16:e9a771ecfdbe 54 virtual void setPadding(int pixels);
duncanFrance 16:e9a771ecfdbe 55 virtual void setBorder(int width, uint16_t colour);
duncanFrance 12:63db16fea709 56
duncanFrance 12:63db16fea709 57 /**
duncanFrance 12:63db16fea709 58 * Cause the widget to redraw itself if is is dirty or damaged
duncanFrance 12:63db16fea709 59 **/
duncanFrance 12:63db16fea709 60 virtual void draw();
duncanFrance 12:63db16fea709 61 virtual void clear();
duncanFrance 12:63db16fea709 62
duncanFrance 12:63db16fea709 63 void show();
duncanFrance 12:63db16fea709 64 void hide();
duncanFrance 12:63db16fea709 65 bool isHidden();
duncanFrance 12:63db16fea709 66
duncanFrance 12:63db16fea709 67 void setEventHandler(EventHandler *handler);
duncanFrance 12:63db16fea709 68 void unsetEventHandler(EventHandler *handler);
duncanFrance 0:0a590815d51c 69
duncanFrance 12:63db16fea709 70 bool intersects(Widget *widget);
duncanFrance 12:63db16fea709 71
duncanFrance 12:63db16fea709 72 /**
duncanFrance 12:63db16fea709 73 * Mark the widget as needing to be redrawn
duncanFrance 12:63db16fea709 74 **/
duncanFrance 12:63db16fea709 75 void dirty();
duncanFrance 12:63db16fea709 76 bool isDirty();
duncanFrance 12:63db16fea709 77 /**
duncanFrance 12:63db16fea709 78 * Mark the widget and all its children as dirty
duncanFrance 12:63db16fea709 79 **/
duncanFrance 12:63db16fea709 80 virtual void dirtyAll();
duncanFrance 12:63db16fea709 81
duncanFrance 12:63db16fea709 82 /**
duncanFrance 12:63db16fea709 83 * Mark the widget as having changed dimensions or location
duncanFrance 12:63db16fea709 84 **/
duncanFrance 12:63db16fea709 85 void damage();
duncanFrance 12:63db16fea709 86 bool isDamaged();
duncanFrance 12:63db16fea709 87
duncanFrance 12:63db16fea709 88 void adjust();
duncanFrance 12:63db16fea709 89
duncanFrance 12:63db16fea709 90 /**
duncanFrance 12:63db16fea709 91 * Convenience method
duncanFrance 12:63db16fea709 92 **/
duncanFrance 12:63db16fea709 93 GraphicsDisplay *display();
duncanFrance 12:63db16fea709 94
duncanFrance 12:63db16fea709 95 protected:
duncanFrance 8:a460cabc85ac 96
duncanFrance 12:63db16fea709 97 virtual void _draw();
duncanFrance 12:63db16fea709 98 virtual void _clear();
duncanFrance 12:63db16fea709 99
duncanFrance 12:63db16fea709 100 virtual void _dirty();
duncanFrance 12:63db16fea709 101 virtual void _damage();
duncanFrance 12:63db16fea709 102 virtual void _adjust();
duncanFrance 12:63db16fea709 103
duncanFrance 12:63db16fea709 104
duncanFrance 12:63db16fea709 105 Widget* _parent;
duncanFrance 12:63db16fea709 106 GraphicsContext* _context;
duncanFrance 12:63db16fea709 107 uint16_t _fg, _bg;
duncanFrance 12:63db16fea709 108
duncanFrance 13:6714534e7974 109 Point _offset;
duncanFrance 12:63db16fea709 110 Rectangle _outer;
duncanFrance 12:63db16fea709 111 Rectangle _inner;
duncanFrance 12:63db16fea709 112
duncanFrance 12:63db16fea709 113 bool _hidden;
duncanFrance 12:63db16fea709 114 int _padding;
duncanFrance 12:63db16fea709 115 int _borderWidth;
duncanFrance 12:63db16fea709 116 uint16_t _borderColour;
duncanFrance 8:a460cabc85ac 117
duncanFrance 12:63db16fea709 118 bool _adjusting;
duncanFrance 8:a460cabc85ac 119
duncanFrance 12:63db16fea709 120 bool _dirtied;
duncanFrance 12:63db16fea709 121 bool _dirtying;
duncanFrance 12:63db16fea709 122
duncanFrance 12:63db16fea709 123 bool _damaged;
duncanFrance 12:63db16fea709 124 bool _damaging;
duncanFrance 0:0a590815d51c 125 };
duncanFrance 0:0a590815d51c 126
duncanFrance 0:0a590815d51c 127 #endif