summaryrefslogtreecommitdiff
path: root/src/components/gfx/Gfx.h
diff options
context:
space:
mode:
authorAvamander <avamander@gmail.com>2020-10-02 22:16:48 +0300
committerAvamander <avamander@gmail.com>2020-10-02 22:16:48 +0300
commit6c86d1d9d706706fcb6f214aba8259e61ed68755 (patch)
tree2f4137a9916869cee18fd01449aa83ee586b9604 /src/components/gfx/Gfx.h
parent4daab2692692d47af24a9384eb0f402821527882 (diff)
Fixed all the includes that were broken due to the renames
Diffstat (limited to 'src/components/gfx/Gfx.h')
-rw-r--r--src/components/gfx/Gfx.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/components/gfx/Gfx.h b/src/components/gfx/Gfx.h
new file mode 100644
index 00000000..091f06f5
--- /dev/null
+++ b/src/components/gfx/Gfx.h
@@ -0,0 +1,60 @@
+#pragma once
+#include <cstdint>
+#include <nrf_font.h>
+#include <drivers/BufferProvider.h>
+#include <FreeRTOS.h>
+#include <task.h>
+
+
+namespace Pinetime {
+ namespace Drivers {
+ class St7789;
+ }
+ namespace Components {
+ class Gfx : public Pinetime::Drivers::BufferProvider {
+ public:
+ explicit Gfx(Drivers::St7789& lcd);
+ void Init();
+ void ClearScreen();
+ void DrawString(uint8_t x, uint8_t y, uint16_t color, const char* text, const FONT_INFO *p_font, bool wrap);
+ void DrawChar(const FONT_INFO *font, uint8_t c, uint8_t *x, uint8_t y, uint16_t color);
+ void FillRectangle(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint16_t color);
+ void FillRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t* b);
+ void SetScrollArea(uint16_t topFixedLines, uint16_t scrollLines, uint16_t bottomFixedLines);
+ void SetScrollStartLine(uint16_t line);
+
+
+ void Sleep();
+ void Wakeup();
+ bool GetNextBuffer(uint8_t **buffer, size_t &size) override;
+ void pixel_draw(uint8_t x, uint8_t y, uint16_t color);
+
+
+ private:
+ static constexpr uint8_t width = 240;
+ static constexpr uint8_t height = 240;
+
+ enum class Action { None, FillRectangle, DrawChar};
+ struct State {
+ State() : busy{false}, action{Action::None}, remainingIterations{0}, currentIteration{0} {}
+ volatile bool busy;
+ volatile Action action;
+ volatile uint16_t remainingIterations;
+ volatile uint16_t currentIteration;
+ volatile FONT_INFO *font;
+ volatile uint16_t color;
+ volatile uint8_t character;
+ volatile TaskHandle_t taskToNotify = nullptr;
+ };
+
+ volatile State state;
+
+ uint16_t buffer[width]; // 1 line buffer
+ Drivers::St7789& lcd;
+
+ void SetBackgroundColor(uint16_t color);
+ void WaitTransfertFinished() const;
+ void NotifyEndOfTransfert(TaskHandle_t task);
+ };
+ }
+}