Adafruit_GFX.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #ifndef _ADAFRUIT_GFX_H
  2. #define _ADAFRUIT_GFX_H
  3. #if ARDUINO >= 100
  4. #include "Arduino.h"
  5. #include "Print.h"
  6. #else
  7. #include "WProgram.h"
  8. #endif
  9. #include "gfxfont.h"
  10. class Adafruit_GFX : public Print {
  11. public:
  12. Adafruit_GFX(int16_t w, int16_t h); // Constructor
  13. // This MUST be defined by the subclass:
  14. virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
  15. // TRANSACTION API / CORE DRAW API
  16. // These MAY be overridden by the subclass to provide device-specific
  17. // optimized code. Otherwise 'generic' versions are used.
  18. virtual void startWrite(void);
  19. virtual void writePixel(int16_t x, int16_t y, uint16_t color);
  20. virtual void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
  21. virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
  22. virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
  23. virtual void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
  24. virtual void endWrite(void);
  25. // CONTROL API
  26. // These MAY be overridden by the subclass to provide device-specific
  27. // optimized code. Otherwise 'generic' versions are used.
  28. virtual void setRotation(uint8_t r);
  29. virtual void invertDisplay(boolean i);
  30. // BASIC DRAW API
  31. // These MAY be overridden by the subclass to provide device-specific
  32. // optimized code. Otherwise 'generic' versions are used.
  33. virtual void
  34. // It's good to implement those, even if using transaction API
  35. drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
  36. drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
  37. fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
  38. fillScreen(uint16_t color),
  39. // Optional and probably not necessary to change
  40. drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
  41. drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
  42. // These exist only with Adafruit_GFX (no subclass overrides)
  43. void
  44. drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
  45. drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
  46. uint16_t color),
  47. fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
  48. fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
  49. int16_t delta, uint16_t color),
  50. drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
  51. int16_t x2, int16_t y2, uint16_t color),
  52. fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
  53. int16_t x2, int16_t y2, uint16_t color),
  54. drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
  55. int16_t radius, uint16_t color),
  56. fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
  57. int16_t radius, uint16_t color),
  58. drawBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
  59. int16_t w, int16_t h, uint16_t color),
  60. drawBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
  61. int16_t w, int16_t h, uint16_t color, uint16_t bg),
  62. drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
  63. int16_t w, int16_t h, uint16_t color),
  64. drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
  65. int16_t w, int16_t h, uint16_t color, uint16_t bg),
  66. drawXBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
  67. int16_t w, int16_t h, uint16_t color),
  68. drawGrayscaleBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
  69. int16_t w, int16_t h),
  70. drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap,
  71. int16_t w, int16_t h),
  72. drawGrayscaleBitmap(int16_t x, int16_t y,
  73. PROGMEM const uint8_t bitmap[], PROGMEM const uint8_t mask[],
  74. int16_t w, int16_t h),
  75. drawGrayscaleBitmap(int16_t x, int16_t y,
  76. uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
  77. drawRGBBitmap(int16_t x, int16_t y, PROGMEM const uint16_t bitmap[],
  78. int16_t w, int16_t h),
  79. drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap,
  80. int16_t w, int16_t h),
  81. drawRGBBitmap(int16_t x, int16_t y,
  82. PROGMEM const uint16_t bitmap[], PROGMEM const uint8_t mask[],
  83. int16_t w, int16_t h),
  84. drawRGBBitmap(int16_t x, int16_t y,
  85. uint16_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
  86. drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,
  87. uint16_t bg, uint8_t size),
  88. setCursor(int16_t x, int16_t y),
  89. setTextColor(uint16_t c),
  90. setTextColor(uint16_t c, uint16_t bg),
  91. setTextSize(uint8_t s),
  92. setTextWrap(boolean w),
  93. cp437(boolean x=true),
  94. setFont(const GFXfont *f = NULL),
  95. getTextBounds(char *string, int16_t x, int16_t y,
  96. int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h),
  97. getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y,
  98. int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);
  99. #if ARDUINO >= 100
  100. virtual size_t write(uint8_t);
  101. #else
  102. virtual void write(uint8_t);
  103. #endif
  104. int16_t height(void) const;
  105. int16_t width(void) const;
  106. uint8_t getRotation(void) const;
  107. // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
  108. int16_t getCursorX(void) const;
  109. int16_t getCursorY(void) const;
  110. protected:
  111. void
  112. charBounds(char c, int16_t *x, int16_t *y,
  113. int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy);
  114. const int16_t
  115. WIDTH, HEIGHT; // This is the 'raw' display w/h - never changes
  116. int16_t
  117. _width, _height, // Display w/h as modified by current rotation
  118. cursor_x, cursor_y;
  119. uint16_t
  120. textcolor, textbgcolor;
  121. uint8_t
  122. textsize,
  123. rotation;
  124. boolean
  125. wrap, // If set, 'wrap' text at right edge of display
  126. _cp437; // If set, use correct CP437 charset (default is off)
  127. GFXfont
  128. *gfxFont;
  129. };
  130. class Adafruit_GFX_Button {
  131. public:
  132. Adafruit_GFX_Button(void);
  133. // "Classic" initButton() uses center & size
  134. void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,
  135. uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
  136. uint16_t textcolor, char *label, uint8_t textsize);
  137. // New/alt initButton() uses upper-left corner & size
  138. void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1,
  139. uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
  140. uint16_t textcolor, char *label, uint8_t textsize);
  141. void drawButton(boolean inverted = false);
  142. boolean contains(int16_t x, int16_t y);
  143. void press(boolean p);
  144. boolean isPressed();
  145. boolean justPressed();
  146. boolean justReleased();
  147. private:
  148. Adafruit_GFX *_gfx;
  149. int16_t _x1, _y1; // Coordinates of top-left corner
  150. uint16_t _w, _h;
  151. uint8_t _textsize;
  152. uint16_t _outlinecolor, _fillcolor, _textcolor;
  153. char _label[10];
  154. boolean currstate, laststate;
  155. };
  156. class GFXcanvas1 : public Adafruit_GFX {
  157. public:
  158. GFXcanvas1(uint16_t w, uint16_t h);
  159. ~GFXcanvas1(void);
  160. void drawPixel(int16_t x, int16_t y, uint16_t color),
  161. fillScreen(uint16_t color);
  162. uint8_t *getBuffer(void);
  163. private:
  164. uint8_t *buffer;
  165. };
  166. class GFXcanvas8 : public Adafruit_GFX {
  167. public:
  168. GFXcanvas8(uint16_t w, uint16_t h);
  169. ~GFXcanvas8(void);
  170. void drawPixel(int16_t x, int16_t y, uint16_t color),
  171. fillScreen(uint16_t color),
  172. writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
  173. uint8_t *getBuffer(void);
  174. private:
  175. uint8_t *buffer;
  176. };
  177. class GFXcanvas16 : public Adafruit_GFX {
  178. public:
  179. GFXcanvas16(uint16_t w, uint16_t h);
  180. ~GFXcanvas16(void);
  181. void drawPixel(int16_t x, int16_t y, uint16_t color),
  182. fillScreen(uint16_t color);
  183. uint16_t *getBuffer(void);
  184. private:
  185. uint16_t *buffer;
  186. };
  187. #endif // _ADAFRUIT_GFX_H