Hatef Dabbaghian / Adafruit-GFX-Library
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Adafruit_GFX.h Source File

Adafruit_GFX.h

00001 #ifndef _ADAFRUIT_GFX_H
00002 #define _ADAFRUIT_GFX_H
00003 
00004 #include <stdint.h>
00005 #include <stdlib.h>
00006 #include <string.h>
00007 #define boolean     bool
00008 #define NULL        0
00009 
00010 #if ARDUINO >= 100
00011  #include "Arduino.h"
00012  #include "Print.h"
00013 #else
00014  //#include "WProgram.h"
00015 #endif
00016 #include "gfxfont.h"
00017 
00018 class Adafruit_GFX {
00019 
00020  public:
00021 
00022   Adafruit_GFX(int16_t w, int16_t h); // Constructor
00023 
00024   // This MUST be defined by the subclass:
00025   virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
00026 
00027   // TRANSACTION API / CORE DRAW API
00028   // These MAY be overridden by the subclass to provide device-specific
00029   // optimized code.  Otherwise 'generic' versions are used.
00030   virtual void startWrite(void);
00031   virtual void writePixel(int16_t x, int16_t y, uint16_t color);
00032   virtual void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00033   virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
00034   virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
00035   virtual void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
00036   virtual void endWrite(void);
00037 
00038   // CONTROL API
00039   // These MAY be overridden by the subclass to provide device-specific
00040   // optimized code.  Otherwise 'generic' versions are used.
00041   virtual void setRotation(uint8_t r);
00042   virtual void invertDisplay(boolean i);
00043 
00044   // BASIC DRAW API
00045   // These MAY be overridden by the subclass to provide device-specific
00046   // optimized code.  Otherwise 'generic' versions are used.
00047   virtual void
00048     // It's good to implement those, even if using transaction API
00049     drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
00050     drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
00051     fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
00052     fillScreen(uint16_t color),
00053     // Optional and probably not necessary to change
00054     drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
00055     drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00056 
00057   // These exist only with Adafruit_GFX (no subclass overrides)
00058   void
00059     drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
00060     drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
00061       uint16_t color),
00062     fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
00063     fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
00064       int16_t delta, uint16_t color),
00065     drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
00066       int16_t x2, int16_t y2, uint16_t color),
00067     fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
00068       int16_t x2, int16_t y2, uint16_t color),
00069     drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
00070       int16_t radius, uint16_t color),
00071     fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
00072       int16_t radius, uint16_t color),
00073     drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[],
00074       int16_t w, int16_t h, uint16_t color),
00075     drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[],
00076       int16_t w, int16_t h, uint16_t color, uint16_t bg),
00077     drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
00078       int16_t w, int16_t h, uint16_t color),
00079     drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
00080       int16_t w, int16_t h, uint16_t color, uint16_t bg),
00081     drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[],
00082       int16_t w, int16_t h, uint16_t color),
00083     drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[],
00084       int16_t w, int16_t h),
00085     drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap,
00086       int16_t w, int16_t h),
00087     drawGrayscaleBitmap(int16_t x, int16_t y,
00088       const uint8_t bitmap[], const uint8_t mask[],
00089       int16_t w, int16_t h),
00090     drawGrayscaleBitmap(int16_t x, int16_t y,
00091       uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
00092     drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[],
00093       int16_t w, int16_t h),
00094     drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap,
00095       int16_t w, int16_t h),
00096     drawRGBBitmap(int16_t x, int16_t y,
00097       const uint16_t bitmap[], const uint8_t mask[],
00098       int16_t w, int16_t h),
00099     drawRGBBitmap(int16_t x, int16_t y,
00100       uint16_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
00101     drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,
00102       uint16_t bg, uint8_t size),
00103     setCursor(int16_t x, int16_t y),
00104     setTextColor(uint16_t c),
00105     setTextColor(uint16_t c, uint16_t bg),
00106     setTextSize(uint8_t s),
00107     setTextWrap(boolean w),
00108     cp437(boolean x=true),
00109     setFont(const GFXfont *f = NULL),
00110     getTextBounds(char *string, int16_t x, int16_t y,
00111       int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);
00112     /*getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y,
00113       int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);*/
00114 
00115 #if ARDUINO >= 100
00116   virtual size_t write(uint8_t);
00117 #else
00118   virtual void   write(uint8_t);
00119 #endif
00120   virtual void   print(char*);
00121 
00122   int16_t height(void) const;
00123   int16_t width(void) const;
00124 
00125   uint8_t getRotation(void) const;
00126 
00127   // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
00128   int16_t getCursorX(void) const;
00129   int16_t getCursorY(void) const;
00130 
00131  protected:
00132   void
00133     charBounds(char c, int16_t *x, int16_t *y,
00134       int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy);
00135   const int16_t
00136     WIDTH, HEIGHT;   // This is the 'raw' display w/h - never changes
00137   int16_t
00138     _width, _height, // Display w/h as modified by current rotation
00139     cursor_x, cursor_y;
00140   uint16_t
00141     textcolor, textbgcolor;
00142   uint8_t
00143     textsize,
00144     rotation;
00145   boolean
00146     wrap,   // If set, 'wrap' text at right edge of display
00147     _cp437; // If set, use correct CP437 charset (default is off)
00148   GFXfont
00149     *gfxFont;
00150 };
00151 
00152 class Adafruit_GFX_Button {
00153 
00154  public:
00155   Adafruit_GFX_Button(void);
00156   // "Classic" initButton() uses center & size
00157   void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,
00158    uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
00159    uint16_t textcolor, char *label, uint8_t textsize);
00160   // New/alt initButton() uses upper-left corner & size
00161   void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1,
00162    uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
00163    uint16_t textcolor, char *label, uint8_t textsize);
00164   void drawButton(boolean inverted = false);
00165   boolean contains(int16_t x, int16_t y);
00166 
00167   void press(boolean p);
00168   boolean isPressed();
00169   boolean justPressed();
00170   boolean justReleased();
00171 
00172  private:
00173   Adafruit_GFX *_gfx;
00174   int16_t       _x1, _y1; // Coordinates of top-left corner
00175   uint16_t      _w, _h;
00176   uint8_t       _textsize;
00177   uint16_t      _outlinecolor, _fillcolor, _textcolor;
00178   char          _label[10];
00179 
00180   boolean currstate, laststate;
00181 };
00182 
00183 class GFXcanvas1 : public Adafruit_GFX {
00184  public:
00185   GFXcanvas1(uint16_t w, uint16_t h);
00186   ~GFXcanvas1(void);
00187   void     drawPixel(int16_t x, int16_t y, uint16_t color),
00188            fillScreen(uint16_t color);
00189   uint8_t *getBuffer(void);
00190  private:
00191   uint8_t *buffer;
00192 };
00193 
00194 class GFXcanvas8 : public Adafruit_GFX {
00195  public:
00196   GFXcanvas8(uint16_t w, uint16_t h);
00197   ~GFXcanvas8(void);
00198   void     drawPixel(int16_t x, int16_t y, uint16_t color),
00199            fillScreen(uint16_t color),
00200            writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
00201 
00202   uint8_t *getBuffer(void);
00203  private:
00204   uint8_t *buffer;
00205 };
00206 
00207 class GFXcanvas16 : public Adafruit_GFX {
00208  public:
00209   GFXcanvas16(uint16_t w, uint16_t h);
00210   ~GFXcanvas16(void);
00211   void      drawPixel(int16_t x, int16_t y, uint16_t color),
00212             fillScreen(uint16_t color);
00213   uint16_t *getBuffer(void);
00214  private:
00215   uint16_t *buffer;
00216 };
00217 
00218 #endif // _ADAFRUIT_GFX_H