| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #ifndef _ADAFRUIT_GFX_H
- #define _ADAFRUIT_GFX_H
- #if ARDUINO >= 100
- #include "Arduino.h"
- #include "Print.h"
- #else
- #include "WProgram.h"
- #endif
- #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),
- setCursor(int16_t x, int16_t y),
- setTextColor(uint16_t c),
- setTextColor(uint16_t c, uint16_t bg),
- setTextSize(uint8_t s),
- setTextWrap(boolean w),
- cp437(boolean x=true),
- setFont(const GFXfont *f = NULL),
- 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);
- #if ARDUINO >= 100
- virtual size_t write(uint8_t);
- #else
- virtual void write(uint8_t);
- #endif
- int16_t height(void) const;
- int16_t width(void) const;
- uint8_t getRotation(void) const;
- // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
- int16_t getCursorX(void) const;
- int16_t getCursorY(void) const;
- protected:
- void
- charBounds(char c, int16_t *x, int16_t *y,
- int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy);
- const 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, ///< Desired magnification 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);
- // 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 drawButton(boolean inverted = false);
- boolean contains(int16_t x, int16_t y);
- void press(boolean p);
- boolean isPressed();
- boolean justPressed();
- boolean justReleased();
- private:
- Adafruit_GFX *_gfx;
- int16_t _x1, _y1; // Coordinates of top-left corner
- uint16_t _w, _h;
- uint8_t _textsize;
- 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);
- uint8_t *getBuffer(void);
- 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);
- uint8_t *getBuffer(void);
- 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);
- uint16_t *getBuffer(void);
- private:
- uint16_t *buffer;
- };
- #endif // _ADAFRUIT_GFX_H
|