Line data Source code
1 : #pragma once 2 : 3 : #include <AH/Containers/LinkedList.hpp> 4 : #include <Def/Def.hpp> 5 : #include <Print.h> 6 : 7 : BEGIN_CS_NAMESPACE 8 : 9 : /** 10 : * @brief An interface for displays. 11 : * 12 : * Inspired by the Adafruit GFX library for easy compatibility. 13 : * 14 : * @ingroup DisplayElements 15 : */ 16 : class DisplayInterface : public Print { 17 : protected: 18 2 : DisplayInterface() = default; 19 : 20 : public: 21 2 : virtual ~DisplayInterface() = default; 22 : 23 : /// Initialize the display. 24 : virtual void begin(); 25 : 26 : /// Clear the frame buffer or clear the display. 27 : virtual void clear() = 0; 28 : /// Draw a custom background. 29 0 : virtual void drawBackground() {} 30 : /// Write the frame buffer to the display. If your display library writes to 31 : /// the display directly, without a display buffer in RAM, you can leave 32 : /// this function empty. 33 : virtual void display() = 0; 34 : 35 : /// Paint a single pixel with the given color. 36 : virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0; 37 : 38 : /// Set the text color. 39 : virtual void setTextColor(uint16_t color) = 0; 40 : /// Set the text size. 41 : virtual void setTextSize(uint8_t size) = 0; 42 : /// Set the cursor position. 43 : virtual void setCursor(int16_t x, int16_t y) = 0; 44 : 45 : /** 46 : * @brief Write a character to the display. 47 : * 48 : * @see setCursor 49 : * @see setTextSize 50 : * @see setTextColor 51 : */ 52 : size_t write(uint8_t c) override = 0; 53 : 54 : /// Draw a line between two points. 55 : virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, 56 : uint16_t color) = 0; 57 : /// Draw a vertical line. 58 : virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, 59 : uint16_t color) = 0; 60 : /// Draw a horizontal line. 61 : virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, 62 : uint16_t color) = 0; 63 : 64 : /// Draw a bitmap to the display. 65 : virtual void drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[], 66 : int16_t w, int16_t h, uint16_t color) = 0; 67 : 68 : /// Draw a filled rectangle. 69 : virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, 70 : uint16_t color); 71 : 72 : /// Draw a circle. 73 : virtual void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); 74 : 75 : /// Draw a disk (filled circle). 76 : virtual void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); 77 : 78 : /** 79 : * @brief Clear the frame buffer, and draw the custom background. 80 : * @see clear 81 : * @see drawBackground 82 : */ 83 0 : void clearAndDrawBackground() { 84 0 : clear(); 85 0 : drawBackground(); 86 0 : } 87 : }; 88 : 89 : END_CS_NAMESPACE