diff options
Diffstat (limited to 'source/widget.hpp')
-rw-r--r-- | source/widget.hpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/source/widget.hpp b/source/widget.hpp new file mode 100644 index 0000000..afa9441 --- /dev/null +++ b/source/widget.hpp @@ -0,0 +1,54 @@ +#ifndef WIDGET_HPP_ +#define WIDGET_HPP_ + +class Adafruit_GFX; + +#include <cstring> + +class Widget { +private: + unsigned int height; +public: + constexpr Widget(unsigned int _height = 0) + : height(_height) {} + + inline unsigned int getHeight(void) const { + return height; + } + + virtual void render(Adafruit_GFX& display, unsigned int ypos) = 0; + +protected: + inline void setHeight(unsigned int _height) { + height = _height; + } +}; + +class TimeWidget : public Widget { +private: + unsigned int prevTicks; + +public: + constexpr TimeWidget(void) + : Widget(30), prevTicks(0) {} + + void render(Adafruit_GFX& display, unsigned int ypos) final; +}; + +class NotificationWidget : public Widget { +private: + char message[36]; + +public: + NotificationWidget(const char *msg) + : Widget(48) { + unsigned int i; + for (i = 0; msg[i] != '\0' && i < 35; i++) + message[i] = msg[i]; + message[i] = '\0'; + setHeight(16 * (i / 12 + 1)); + } + + void render(Adafruit_GFX& display, unsigned int ypos) final; +}; +#endif // WIDGET_HPP_ |