Adafruit_GFX.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. #define adagfxswap(a, b) { int16_t t = a; a = b; b = t; }
  10. #if !defined(ESP8266)
  11. #define swap(a, b) adagfxswap(a, b)
  12. #endif
  13. class Adafruit_GFX : public Print {
  14. public:
  15. Adafruit_GFX(int16_t w, int16_t h); // Constructor
  16. // This MUST be defined by the subclass:
  17. virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
  18. // These MAY be overridden by the subclass to provide device-specific
  19. // optimized code. Otherwise 'generic' versions are used.
  20. virtual void
  21. drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
  22. drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
  23. drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
  24. drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
  25. fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
  26. fillScreen(uint16_t color),
  27. invertDisplay(boolean i);
  28. // These exist only with Adafruit_GFX (no subclass overrides)
  29. void
  30. drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
  31. drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
  32. uint16_t color),
  33. fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
  34. fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
  35. int16_t delta, uint16_t color),
  36. drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
  37. int16_t x2, int16_t y2, uint16_t color),
  38. fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
  39. int16_t x2, int16_t y2, uint16_t color),
  40. drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
  41. int16_t radius, uint16_t color),
  42. fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
  43. int16_t radius, uint16_t color),
  44. drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
  45. int16_t w, int16_t h, uint16_t color),
  46. drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
  47. int16_t w, int16_t h, uint16_t color, uint16_t bg),
  48. drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
  49. int16_t w, int16_t h, uint16_t color),
  50. drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,
  51. uint16_t bg, uint8_t size),
  52. setCursor(int16_t x, int16_t y),
  53. setTextColor(uint16_t c),
  54. setTextColor(uint16_t c, uint16_t bg),
  55. setTextSize(uint8_t s),
  56. setTextWrap(boolean w),
  57. setRotation(uint8_t r),
  58. cp437(boolean x=true);
  59. #if ARDUINO >= 100
  60. virtual size_t write(uint8_t);
  61. #else
  62. virtual void write(uint8_t);
  63. #endif
  64. int16_t height(void) const;
  65. int16_t width(void) const;
  66. uint8_t getRotation(void) const;
  67. // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
  68. int16_t getCursorX(void) const;
  69. int16_t getCursorY(void) const;
  70. protected:
  71. const int16_t
  72. WIDTH, HEIGHT; // This is the 'raw' display w/h - never changes
  73. int16_t
  74. _width, _height, // Display w/h as modified by current rotation
  75. cursor_x, cursor_y;
  76. uint16_t
  77. textcolor, textbgcolor;
  78. uint8_t
  79. textsize,
  80. rotation;
  81. boolean
  82. wrap, // If set, 'wrap' text at right edge of display
  83. _cp437; // If set, use correct CP437 charset (default is off)
  84. };
  85. class Adafruit_GFX_Button {
  86. public:
  87. Adafruit_GFX_Button(void);
  88. void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,
  89. uint8_t w, uint8_t h,
  90. uint16_t outline, uint16_t fill, uint16_t textcolor,
  91. char *label, uint8_t textsize);
  92. void drawButton(boolean inverted = false);
  93. boolean contains(int16_t x, int16_t y);
  94. void press(boolean p);
  95. boolean isPressed();
  96. boolean justPressed();
  97. boolean justReleased();
  98. private:
  99. Adafruit_GFX *_gfx;
  100. int16_t _x, _y;
  101. uint16_t _w, _h;
  102. uint8_t _textsize;
  103. uint16_t _outlinecolor, _fillcolor, _textcolor;
  104. char _label[10];
  105. boolean currstate, laststate;
  106. };
  107. #endif // _ADAFRUIT_GFX_H