Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Wed Jul 27 2022 11:59:20 by
1.7.2