Dmitry Dzhafarkhanov / Adafruit_GFX_SEPS114A
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Adafruit_GFX.h Source File

Adafruit_GFX.h

00001 /***********************************
00002 This is a our graphics core library, for all our displays. 
00003 We'll be adapting all the
00004 existing libaries to use this core to make updating, support 
00005 and upgrading easier!
00006 
00007 Adafruit invests time and resources providing this open source code, 
00008 please support Adafruit and open-source hardware by purchasing 
00009 products from Adafruit!
00010 
00011 Written by Limor Fried/Ladyada  for Adafruit Industries.  
00012 BSD license, check license.txt for more information
00013 All text above must be included in any redistribution
00014 ****************************************/
00015 
00016 /*
00017  *  Modified by Neal Horman 7/14/2012 for use in mbed
00018  */
00019 
00020 #ifndef _ADAFRUIT_GFX_H_
00021 #define _ADAFRUIT_GFX_H_
00022 
00023 #include "Adafruit_GFX_Config.h"
00024 
00025 static inline void swap(int16_t &a, int16_t &b)
00026 {
00027     int16_t t = a;
00028     
00029     a = b;
00030     b = t;
00031 }
00032 
00033 #ifndef _BV
00034 #define _BV(bit) (1<<(bit))
00035 #endif
00036 
00037 /**
00038  * This is a Text and Graphics element drawing class.
00039  * These functions draw to the display buffer.
00040  *
00041 
00042  */
00043 class Adafruit_GFX : public Stream
00044 {
00045  public:
00046     Adafruit_GFX(int16_t w, int16_t h)
00047         : _rawWidth(w)
00048         , _rawHeight(h)
00049         , _width(w)
00050         , _height(h)
00051         , cursor_x(0)
00052         , cursor_y(0)
00053         , textcolor(0xFFFF)
00054         , textbgcolor(0xFFFF)
00055         , textsize(1)
00056         , rotation(0)
00057         , wrap(true)
00058         {};
00059 
00060     /// Paint one BLACK or WHITE pixel in the display buffer
00061     // this must be defined by the subclass
00062     virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
00063     // this is optional
00064     virtual void invertDisplay(bool i) {};
00065     
00066     // Stream implementation - provides printf() interface
00067     // You would otherwise be forced to use writeChar()
00068     virtual int _putc(int value) { return writeChar(value); };
00069     virtual int _getc() { return -1; };
00070 
00071 #ifdef GFX_WANT_ABSTRACTS
00072     // these are 'generic' drawing functions, so we can share them!
00073     
00074     /** Draw a Horizontal Line
00075      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00076      */
00077     virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
00078     /** Draw a rectangle
00079      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00080      */
00081     virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00082     /** Fill the entire display
00083      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00084      */
00085     virtual void fillScreen(uint16_t color);
00086 
00087     /** Draw a circle
00088      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00089      */
00090     void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
00091     void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
00092     
00093     /** Draw and fill a circle
00094      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00095      */
00096     void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
00097     void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
00098 
00099     /** Draw a triangle
00100      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00101      */
00102     void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
00103     /** Draw and fill a triangle
00104      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00105      */
00106     void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
00107     
00108     /** Draw a rounded rectangle
00109      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00110      */
00111     void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
00112     /** Draw and fill a rounded rectangle
00113      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00114      */
00115     void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
00116     /** Draw a bitmap
00117      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00118      */
00119     void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
00120 #endif
00121 
00122 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
00123     /** Draw a line
00124      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00125      */
00126     virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
00127     /** Draw a vertical line
00128      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00129      */
00130     virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
00131     /** Draw and fill a rectangle
00132      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00133      */
00134     virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00135 #endif
00136 
00137     /// Draw a text character at a specified pixel location
00138     void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
00139     /// Draw a text character at the text cursor location
00140     size_t writeChar(uint8_t);
00141 
00142     /// Get the width of the display in pixels
00143     inline int16_t width(void) { return _width; };
00144     /// Get the height of the display in pixels
00145     inline int16_t height(void) { return _height; };
00146 
00147     /// Set the text cursor location, based on the size of the text
00148     inline void setTextCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; };
00149 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
00150     /** Set the size of the text to be drawn
00151      * @note Make sure to enable either GFX_SIZEABLE_TEXT or GFX_WANT_ABSTRACTS
00152      */
00153     inline void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; };
00154 #endif
00155     /// Set the text foreground and background colors to be the same
00156     inline void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; }
00157     /// Set the text foreground and background colors independantly
00158     inline void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; };
00159     /// Set text wraping mode true or false
00160     inline void setTextWrap(bool w) { wrap = w; };
00161 
00162     /// Set the display rotation, 1, 2, 3, or 4
00163     void setRotation(uint8_t r);
00164     /// Get the current rotation
00165     inline uint8_t getRotation(void) { rotation %= 4; return rotation; };
00166 
00167 protected:
00168     int16_t  _rawWidth, _rawHeight;   // this is the 'raw' display w/h - never changes
00169     int16_t  _width, _height; // dependent on rotation
00170     int16_t  cursor_x, cursor_y;
00171     uint16_t textcolor, textbgcolor;
00172     uint8_t  textsize;
00173     uint8_t  rotation;
00174     bool  wrap; // If set, 'wrap' text at right edge of display
00175 };
00176 
00177 #endif