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