aboutsummaryrefslogtreecommitdiffstats
path: root/source/widget.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/widget.hpp')
-rw-r--r--source/widget.hpp54
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_