Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SimpleGUI by
Widgets/Widget.h@16:e9a771ecfdbe, 2016-05-22 (annotated)
- 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?
User | Revision | Line number | New 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 |