A derived version of the BSD licensed Adafrut GFX library for the SSD1306 controller for an OLED 128x32 or 128x64 display using SPI or I2C.
Fork of Adafruit_GFX by
Diff: Adafruit_GFX.h
- Revision:
- 9:ddb97c9850a2
- Parent:
- 2:7bcea45e60d8
- Child:
- 11:86909e6db3c8
--- a/Adafruit_GFX.h Sun Oct 19 04:45:11 2014 +0000 +++ b/Adafruit_GFX.h Sun Oct 19 20:55:27 2014 +0000 @@ -1,111 +1,122 @@ -/*********************************** -This is a our graphics core library, for all our displays. -We'll be adapting all the -existing libaries to use this core to make updating, support -and upgrading easier! - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information -All text above must be included in any redistribution -****************************************/ - -/* - * Modified by Neal Horman 7/14/2012 for use in LPC1768 - */ - -#ifndef _ADAFRUIT_GFX_H_ -#define _ADAFRUIT_GFX_H_ - -static inline void swap(int16_t &a, int16_t &b) -{ - int16_t t = a; - - a = b; - b = t; -} - -#ifndef _BV -#define _BV(bit) (1<<(bit)) -#endif - -#define BLACK 0 -#define WHITE 1 - -class Adafruit_GFX : public Stream -{ - public: - Adafruit_GFX(int16_t w, int16_t h) - : _rawWidth(w) - , _rawHeight(h) - , _width(w) - , _height(h) - , cursor_x(0) - , cursor_y(0) - , textcolor(WHITE) - , textbgcolor(BLACK) - , textsize(1) - , rotation(0) - , wrap(true) - {}; - - // this must be defined by the subclass - virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0; - // this is optional - virtual void invertDisplay(bool i) {}; - - // Stream implementation - provides printf() interface - // You would otherwise be forced to use writeChar() - virtual int _putc(int value) { return writeChar(value); }; - virtual int _getc() { return -1; }; - -#ifdef WANT_ABSTRACTS - // these are 'generic' drawing functions, so we can share them! - virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); - virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); - virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); - virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - virtual void fillScreen(uint16_t color); - - void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color); - void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); - void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color); - - void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); - void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); - void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); - void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); -#endif - - void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); - void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); - size_t writeChar(uint8_t); - - int16_t width(void) { return _width; }; - int16_t height(void) { return _height; }; - - void setCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; }; - void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; }; - void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; } - void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; }; - void setTextWrap(bool w) { wrap = w; }; - - void setRotation(uint8_t r); - uint8_t getRotation(void) { rotation %= 4; return rotation; }; - -protected: - int16_t _rawWidth, _rawHeight; // this is the 'raw' display w/h - never changes - int16_t _width, _height; // dependent on rotation - int16_t cursor_x, cursor_y; - uint16_t textcolor, textbgcolor; - uint8_t textsize; - uint8_t rotation; - bool wrap; // If set, 'wrap' text at right edge of display -}; - -#endif +/*********************************** +This is a our graphics core library, for all our displays. +We'll be adapting all the +existing libaries to use this core to make updating, support +and upgrading easier! + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above must be included in any redistribution +****************************************/ + +/* + * Modified by Neal Horman 7/14/2012 for use in mbed + */ + +#ifndef _ADAFRUIT_GFX_H_ +#define _ADAFRUIT_GFX_H_ + +// Uncomment this on to enable all functionality +//#define GFX_WANT_ABSTRACTS + +// Uncomment this to enable only runtime font scaling, without all the rest of the Abstracts +//#define GFX_SIZEABLE_TEXT + +static inline void swap(int16_t &a, int16_t &b) +{ + int16_t t = a; + + a = b; + b = t; +} + +#ifndef _BV +#define _BV(bit) (1<<(bit)) +#endif + +#define BLACK 0 +#define WHITE 1 + +class Adafruit_GFX : public Stream +{ + public: + Adafruit_GFX(int16_t w, int16_t h) + : _rawWidth(w) + , _rawHeight(h) + , _width(w) + , _height(h) + , cursor_x(0) + , cursor_y(0) + , textcolor(WHITE) + , textbgcolor(BLACK) + , textsize(1) + , rotation(0) + , wrap(true) + {}; + + // this must be defined by the subclass + virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0; + // this is optional + virtual void invertDisplay(bool i) {}; + + // Stream implementation - provides printf() interface + // You would otherwise be forced to use writeChar() + virtual int _putc(int value) { return writeChar(value); }; + virtual int _getc() { return -1; }; + +#ifdef GFX_WANT_ABSTRACTS + // these are 'generic' drawing functions, so we can share them! + virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + virtual void fillScreen(uint16_t color); + + void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color); + void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color); + + void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); + void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); + void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); + void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); +#endif + +#if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT) + virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); +#endif + + void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); + void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); + size_t writeChar(uint8_t); + + int16_t width(void) { return _width; }; + int16_t height(void) { return _height; }; + + void setTextCursor(int16_t x, int16_t y) { cursor_x = x; cursor_y = y; }; +#if defined(GFX_SIZEABLE_TEXT) + void setTextSize(uint8_t s) { textsize = (s > 0) ? s : 1; }; +#endif + void setTextColor(uint16_t c) { textcolor = c; textbgcolor = c; } + void setTextColor(uint16_t c, uint16_t b) { textcolor = c; textbgcolor = b; }; + void setTextWrap(bool w) { wrap = w; }; + + void setRotation(uint8_t r); + uint8_t getRotation(void) { rotation %= 4; return rotation; }; + +protected: + int16_t _rawWidth, _rawHeight; // this is the 'raw' display w/h - never changes + int16_t _width, _height; // dependent on rotation + int16_t cursor_x, cursor_y; + uint16_t textcolor, textbgcolor; + uint8_t textsize; + uint8_t rotation; + bool wrap; // If set, 'wrap' text at right edge of display +}; + +#endif