diff options
| author | gamerdonkey | 2024-09-14 16:00:46 -0500 |
|---|---|---|
| committer | gamerdonkey | 2024-09-14 16:00:46 -0500 |
| commit | 8909bb8e8c915d105daaf7d1fd03546af5ab4d94 (patch) | |
| tree | 41c989043795df4a21f1c6ecbf674a46b77a7b94 /components/fasani__adafruit_gfx/Adafruit_GFX.h | |
| parent | 35ff74c9be46e16030d1184a506451e1d3805c25 (diff) | |
| download | esp32-inova-led-controller-8909bb8e8c915d105daaf7d1fd03546af5ab4d94.tar.gz esp32-inova-led-controller-8909bb8e8c915d105daaf7d1fd03546af5ab4d94.tar.bz2 esp32-inova-led-controller-8909bb8e8c915d105daaf7d1fd03546af5ab4d94.zip | |
Changing to use an Adafruit_GFX library from components repo.
Diffstat (limited to 'components/fasani__adafruit_gfx/Adafruit_GFX.h')
| -rw-r--r-- | components/fasani__adafruit_gfx/Adafruit_GFX.h | 353 |
1 files changed, 353 insertions, 0 deletions
diff --git a/components/fasani__adafruit_gfx/Adafruit_GFX.h b/components/fasani__adafruit_gfx/Adafruit_GFX.h new file mode 100644 index 0000000..fffb4a4 --- /dev/null +++ b/components/fasani__adafruit_gfx/Adafruit_GFX.h @@ -0,0 +1,353 @@ +#ifndef _ADAFRUIT_GFX_H +#define _ADAFRUIT_GFX_H + +#include <stdbool.h> +typedef bool boolean; +#include <stdint.h> +#include <stdio.h> +#include "Print.h" +#include "gfxfont.h" +/// A generic graphics superclass that can handle all sorts of drawing. At a +/// minimum you can subclass and provide drawPixel(). At a maximum you can do a +/// ton of overriding to optimize. Used for any/all Adafruit displays! +class Adafruit_GFX : public Print { + +public: + Adafruit_GFX(int16_t w, int16_t h); // Constructor + + // This MUST be defined by the subclass: + virtual void drawPixel( + int16_t x, int16_t y, + uint16_t color) = 0; ///< Virtual drawPixel() function to draw to the + ///< screen/framebuffer/etc, must be overridden in + ///< subclass. @param x X coordinate. @param y Y + ///< coordinate. @param color 16-bit pixel color. + + // TRANSACTION API / CORE DRAW API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + virtual void startWrite(void); + virtual void writePixel(int16_t x, int16_t y, uint16_t color); + virtual void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, + uint16_t color); + virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, + uint16_t color); + virtual void endWrite(void); + + // CONTROL API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + virtual void setRotation(uint8_t r); + virtual void invertDisplay(boolean i); + + // BASIC DRAW API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + virtual void + // It's good to implement those, even if using transaction API + drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color), + drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color), + fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color), + fillScreen(uint16_t color), + // Optional and probably not necessary to change + drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color), + drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + + // These exist only with Adafruit_GFX (no subclass overrides) + void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color), + drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, + uint16_t color), + fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color), + fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, + int16_t delta, uint16_t color), + drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, + int16_t y2, uint16_t color), + fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, + int16_t y2, uint16_t color), + drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, + int16_t radius, uint16_t color), + fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, + int16_t radius, uint16_t color), + drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, + int16_t h, uint16_t color), + drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, + int16_t h, uint16_t color, uint16_t bg), + drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, + uint16_t color), + drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, + uint16_t color, uint16_t bg), + drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, + int16_t h, uint16_t color), + drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], + int16_t w, int16_t h), + drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, + int16_t h), + drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], + const uint8_t mask[], int16_t w, int16_t h), + drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint8_t *mask, + int16_t w, int16_t h), + drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, + int16_t h), + drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, + int16_t h), + drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], + const uint8_t mask[], int16_t w, int16_t h), + drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, uint8_t *mask, + int16_t w, int16_t h), + drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, + uint16_t bg, uint8_t size), + drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, + uint16_t bg, uint8_t size_x, uint8_t size_y), + getTextBounds(const char *string, int16_t x, int16_t y, int16_t *x1, + int16_t *y1, uint16_t *w, uint16_t *h), + getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y, + int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h), + getTextBounds(const String &str, int16_t x, int16_t y, int16_t *x1, + int16_t *y1, uint16_t *w, uint16_t *h), + setTextSize(uint8_t s), setTextSize(uint8_t sx, uint8_t sy), + setFont(const GFXfont *f = NULL); + + /**********************************************************************/ + /*! + @brief Set text cursor location + @param x X coordinate in pixels + @param y Y coordinate in pixels + */ + /**********************************************************************/ + void setCursor(int16_t x, int16_t y) { + cursor_x = x; + cursor_y = y; + } + + /**********************************************************************/ + /*! + @brief Set text font color with transparant background + @param c 16-bit 5-6-5 Color to draw text with + @note For 'transparent' background, background and foreground + are set to same color rather than using a separate flag. + */ + /**********************************************************************/ + void setTextColor(uint16_t c) { textcolor = textbgcolor = c; } + + /**********************************************************************/ + /*! + @brief Set text font color with custom background color + @param c 16-bit 5-6-5 Color to draw text with + @param bg 16-bit 5-6-5 Color to draw background/fill with + */ + /**********************************************************************/ + void setTextColor(uint16_t c, uint16_t bg) { + textcolor = c; + textbgcolor = bg; + } + + /**********************************************************************/ + /*! + @brief Set whether text that is too long for the screen width should + automatically wrap around to the next line (else clip right). + @param w true for wrapping, false for clipping + */ + /**********************************************************************/ + void setTextWrap(boolean w) { wrap = w; } + + /**********************************************************************/ + /*! + @brief Enable (or disable) Code Page 437-compatible charset. + There was an error in glcdfont.c for the longest time -- one + character (#176, the 'light shade' block) was missing -- this + threw off the index of every character that followed it. + But a TON of code has been written with the erroneous + character indices. By default, the library uses the original + 'wrong' behavior and old sketches will still work. Pass + 'true' to this function to use correct CP437 character values + in your code. + @param x true = enable (new behavior), false = disable (old behavior) + */ + /**********************************************************************/ + void cp437(boolean x = true) { _cp437 = x; } + + using Print::write; + + virtual size_t write(uint8_t); + + + /************************************************************************/ + /*! + @brief Get width of the display, accounting for current rotation + @returns Width in pixels + */ + /************************************************************************/ + int16_t width(void) const { return _width; }; + + /************************************************************************/ + /*! + @brief Get height of the display, accounting for current rotation + @returns Height in pixels + */ + /************************************************************************/ + int16_t height(void) const { return _height; } + + /************************************************************************/ + /*! + @brief Get rotation setting for display + @returns 0 thru 3 corresponding to 4 cardinal rotations + */ + /************************************************************************/ + uint8_t getRotation(void) const { return rotation; } + + // get current cursor position (get rotation safe maximum values, + // using: width() for x, height() for y) + /************************************************************************/ + /*! + @brief Get text cursor X location + @returns X coordinate in pixels + */ + /************************************************************************/ + int16_t getCursorX(void) const { return cursor_x; } + + /************************************************************************/ + /*! + @brief Get text cursor Y location + @returns Y coordinate in pixels + */ + /************************************************************************/ + int16_t getCursorY(void) const { return cursor_y; }; + +protected: + void charBounds(char c, int16_t *x, int16_t *y, int16_t *minx, int16_t *miny, + int16_t *maxx, int16_t *maxy); + int16_t WIDTH, ///< This is the 'raw' display width - never changes + HEIGHT; ///< This is the 'raw' display height - never changes + int16_t _width, ///< Display width as modified by current rotation + _height, ///< Display height as modified by current rotation + cursor_x, ///< x location to start print()ing text + cursor_y; ///< y location to start print()ing text + uint16_t textcolor, ///< 16-bit background color for print() + textbgcolor; ///< 16-bit text color for print() + uint8_t textsize_x, ///< Desired magnification in X-axis of text to print() + textsize_y, ///< Desired magnification in Y-axis of text to print() + rotation; ///< Display rotation (0 thru 3) + boolean wrap, ///< If set, 'wrap' text at right edge of display + _cp437; ///< If set, use correct CP437 charset (default is off) + GFXfont *gfxFont; ///< Pointer to special font +}; + +/// A simple drawn button UI element +class Adafruit_GFX_Button { + +public: + Adafruit_GFX_Button(void); + // "Classic" initButton() uses center & size + void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, + uint16_t h, uint16_t outline, uint16_t fill, + uint16_t textcolor, char *label, uint8_t textsize); + void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, + uint16_t h, uint16_t outline, uint16_t fill, + uint16_t textcolor, char *label, uint8_t textsize_x, + uint8_t textsize_y); + // New/alt initButton() uses upper-left corner & size + void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, + uint16_t h, uint16_t outline, uint16_t fill, + uint16_t textcolor, char *label, uint8_t textsize); + void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, + uint16_t h, uint16_t outline, uint16_t fill, + uint16_t textcolor, char *label, uint8_t textsize_x, + uint8_t textsize_y); + void drawButton(boolean inverted = false); + boolean contains(int16_t x, int16_t y); + + /**********************************************************************/ + /*! + @brief Sets button state, should be done by some touch function + @param p True for pressed, false for not. + */ + /**********************************************************************/ + void press(boolean p) { + laststate = currstate; + currstate = p; + } + + boolean justPressed(); + boolean justReleased(); + + /**********************************************************************/ + /*! + @brief Query whether the button is currently pressed + @returns True if pressed + */ + /**********************************************************************/ + boolean isPressed(void) { return currstate; }; + +private: + Adafruit_GFX *_gfx; + int16_t _x1, _y1; // Coordinates of top-left corner + uint16_t _w, _h; + uint8_t _textsize_x; + uint8_t _textsize_y; + uint16_t _outlinecolor, _fillcolor, _textcolor; + char _label[10]; + + boolean currstate, laststate; +}; + +/// A GFX 1-bit canvas context for graphics +class GFXcanvas1 : public Adafruit_GFX { +public: + GFXcanvas1(uint16_t w, uint16_t h); + ~GFXcanvas1(void); + void drawPixel(int16_t x, int16_t y, uint16_t color), + fillScreen(uint16_t color); + /**********************************************************************/ + /*! + @brief Get a pointer to the internal buffer memory + @returns A pointer to the allocated buffer + */ + /**********************************************************************/ + uint8_t *getBuffer(void) const { return buffer; } + +private: + uint8_t *buffer; +}; + +/// A GFX 8-bit canvas context for graphics +class GFXcanvas8 : public Adafruit_GFX { +public: + GFXcanvas8(uint16_t w, uint16_t h); + ~GFXcanvas8(void); + void drawPixel(int16_t x, int16_t y, uint16_t color), + fillScreen(uint16_t color), + writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + /**********************************************************************/ + /*! + @brief Get a pointer to the internal buffer memory + @returns A pointer to the allocated buffer + */ + /**********************************************************************/ + uint8_t *getBuffer(void) const { return buffer; } + +private: + uint8_t *buffer; +}; + +/// A GFX 16-bit canvas context for graphics +class GFXcanvas16 : public Adafruit_GFX { +public: + GFXcanvas16(uint16_t w, uint16_t h); + ~GFXcanvas16(void); + void drawPixel(int16_t x, int16_t y, uint16_t color), + fillScreen(uint16_t color), byteSwap(void); + /**********************************************************************/ + /*! + @brief Get a pointer to the internal buffer memory + @returns A pointer to the allocated buffer + */ + /**********************************************************************/ + uint16_t *getBuffer(void) const { return buffer; } + +private: + uint16_t *buffer; +}; + +#endif // _ADAFRUIT_GFX_H
\ No newline at end of file |
