Deleted Adafruit Llgo

Dependents:   GPS_OLED_HelloWorld WIZwiki-REST-io_v101 WIZwiki-REST-io_v102 WIZwiki-REST-io_v103

Fork of Adafruit_GFX by DongEun Koak

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 #define BLACK 0
00038 #define WHITE 1
00039 
00040 /**
00041  * This is a Text and Graphics element drawing class.
00042  * These functions draw to the display buffer.
00043  *
00044  * Display drivers should be derived from here.
00045  * The Display drivers push the display buffer to the
00046  * hardware based on application control.
00047  *
00048  */
00049 class Adafruit_GFX : public Stream
00050 {
00051 public:
00052     Adafruit_GFX(int16_t w, int16_t h)
00053         : _rawWidth(w)
00054         , _rawHeight(h)
00055         , _width(w)
00056         , _height(h)
00057         , cursor_x(0)
00058         , cursor_y(0)
00059         , textcolor(WHITE)
00060         , textbgcolor(BLACK)
00061         , textsize(1)
00062         , rotation(0)
00063         , wrap(true)
00064     {};
00065 
00066     /// Paint one BLACK or WHITE pixel in the display buffer
00067     // this must be defined by the subclass
00068     virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
00069     // this is optional
00070     virtual void invertDisplay(bool i) {};
00071 
00072     // Stream implementation - provides printf() interface
00073     // You would otherwise be forced to use writeChar()
00074     virtual int _putc(int value) {
00075         return writeChar(value);
00076     };
00077     virtual int _getc() {
00078         return -1;
00079     };
00080 
00081 #ifdef GFX_WANT_ABSTRACTS
00082     // these are 'generic' drawing functions, so we can share them!
00083 
00084     /** Draw a Horizontal Line
00085      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00086      */
00087     virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
00088     /** Draw a rectangle
00089      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00090      */
00091     virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00092     /** Fill the entire display
00093      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00094      */
00095     virtual void fillScreen(uint16_t color);
00096 
00097     /** Draw a circle
00098      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00099      */
00100     void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
00101     void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
00102 
00103     /** Draw and fill a circle
00104      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00105      */
00106     void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
00107     void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
00108 
00109     /** Draw a triangle
00110      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00111      */
00112     void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
00113     /** Draw and fill a triangle
00114      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00115      */
00116     void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
00117 
00118     /** Draw a rounded rectangle
00119      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00120      */
00121     void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
00122     /** Draw and fill a rounded rectangle
00123      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00124      */
00125     void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
00126     /** Draw a bitmap
00127      * @note GFX_WANT_ABSTRACTS must be defined in Adafruit_GFX_config.h
00128      */
00129     void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
00130 #endif
00131 
00132 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
00133     /** Draw a line
00134      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00135      */
00136     virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
00137     /** Draw a vertical line
00138      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00139      */
00140     virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
00141     /** Draw and fill a rectangle
00142      * @note GFX_WANT_ABSTRACTS or GFX_SIZEABLE_TEXT must be defined in Adafruit_GFX_config.h
00143      */
00144     virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00145 #endif
00146 
00147     /// Draw a text character at a specified pixel location
00148     void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
00149     /// Draw a text character at the text cursor location
00150     size_t writeChar(uint8_t);
00151 
00152     /// Get the width of the display in pixels
00153     inline int16_t width(void) {
00154         return _width;
00155     };
00156     /// Get the height of the display in pixels
00157     inline int16_t height(void) {
00158         return _height;
00159     };
00160 
00161     /// Set the text cursor location, based on the size of the text
00162     inline void setTextCursor(int16_t x, int16_t y) {
00163         cursor_x = x;
00164         cursor_y = y;
00165     };
00166 #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT)
00167     /** Set the size of the text to be drawn
00168      * @note Make sure to enable either GFX_SIZEABLE_TEXT or GFX_WANT_ABSTRACTS
00169      */
00170     inline void setTextSize(uint8_t s) {
00171         textsize = (s > 0) ? s : 1;
00172     };
00173 #endif
00174     /// Set the text foreground and background colors to be the same
00175     inline void setTextColor(uint16_t c) {
00176         textcolor = c;
00177         textbgcolor = c;
00178     }
00179     /// Set the text foreground and background colors independantly
00180     inline void setTextColor(uint16_t c, uint16_t b) {
00181         textcolor = c;
00182         textbgcolor = b;
00183     };
00184     /// Set text wraping mode true or false
00185     inline void setTextWrap(bool w) {
00186         wrap = w;
00187     };
00188 
00189     /// Set the display rotation, 1, 2, 3, or 4
00190     void setRotation(uint8_t r);
00191     /// Get the current rotation
00192     inline uint8_t getRotation(void) {
00193         rotation %= 4;
00194         return rotation;
00195     };
00196 
00197 protected:
00198     int16_t  _rawWidth, _rawHeight;   // this is the 'raw' display w/h - never changes
00199     int16_t  _width, _height; // dependent on rotation
00200     int16_t  cursor_x, cursor_y;
00201     uint16_t textcolor, textbgcolor;
00202     uint8_t  textsize;
00203     uint8_t  rotation;
00204     bool  wrap; // If set, 'wrap' text at right edge of display
00205 };
00206 
00207 #endif