PokittoDisplay.h
Go to the documentation of this file.
1 /**************************************************************************/
35 /**************************************************************************/
36 
37 
38 
39 /* THE SEGMENT BELOW PERTAINS TO CIRCLE DRAWING FUNCTIONS ONLY
40 *
41 This is the core graphics library for all our displays, providing a common
42 set of graphics primitives (points, lines, circles, etc.). It needs to be
43 paired with a hardware-specific library for each display device we carry
44 (to handle the lower-level functions).
45 Adafruit invests time and resources providing this open source code, please
46 support Adafruit & open-source hardware by purchasing products from Adafruit!
47 Copyright (c) 2013 Adafruit Industries. All rights reserved.
48 Redistribution and use in source and binary forms, with or without
49 modification, are permitted provided that the following conditions are met:
50 - Redistributions of source code must retain the above copyright notice,
51  this list of conditions and the following disclaimer.
52 - Redistributions in binary form must reproduce the above copyright notice,
53  this list of conditions and the following disclaimer in the documentation
54  and/or other materials provided with the distribution.
55 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
56 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
57 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
58 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
59 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
60 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
61 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
62 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
63 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
64 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
65 POSSIBILITY OF SUCH DAMAGE.
66 */
67 
68 #ifndef POKITTODISPLAY_H
69 #define POKITTODISPLAY_H
70 
71 #include <stdint.h>
72 #include "Pokitto_settings.h"
73 #include "PokittoGlobs.h"
74 #include "PokittoFonts.h"
75 #include "PokittoPalettes.h"
76 
77 // Basic Color definitions
78 #define COLOR_BLACK (uint16_t)(0x0000)
79 #define COLOR_BLUE (uint16_t)(0x001F)
80 #define COLOR_RED (uint16_t)(0xF800)
81 #define COLOR_GREEN (uint16_t)(0x07E0)
82 #define COLOR_CYAN (uint16_t)(0x07FF)
83 #define COLOR_MAGENTA (uint16_t)(0xF81F)
84 #define COLOR_YELLOW (uint16_t)(0xFFE0)
85 #define COLOR_WHITE (uint16_t)(0xFFFF)
86 
87 // Grayscale Values
88 #define COLOR_GRAY_15 (uint16_t)(0x0861) // 15 15 15
89 #define COLOR_GRAY_30 (uint16_t)(0x18E3) // 30 30 30
90 #define COLOR_GRAY_50 (uint16_t)(0x3186) // 50 50 50
91 #define COLOR_GRAY_80 (uint16_t)(0x528A) // 80 80 80
92 #define COLOR_GRAY_128 (uint16_t)(0x8410) // 128 128 128
93 #define COLOR_GRAY_200 (uint16_t)(0xCE59) // 200 200 200
94 #define COLOR_GRAY_225 (uint16_t)(0xE71C) // 225 225 225
95 
98 enum defcolors {
99  C_BLACK,
100  C_DARKBLUE,
101  C_PURPLE,
102  C_DARKGREEN,
103 
104  C_BROWN,
105  C_DARKBROWN,
106  C_LIGHTGRAY,
107  C_WHITE,
108 
109  C_RED,
110  C_ORANGE,
111  C_YELLOW,
112  C_GREEN,
113 
114  C_BLUE,
115  C_DARKGRAY,
116  C_PINK,
117  C_PEACH
118 };
119 
120 const uint16_t def565palette[16] = {
121  //kind of like pico8 palette
122  0,0x194a,0x792a,0x42a,
123  0xaa86,0x5aa9,0xc618,0xff9d,
124  0xf809,0xfd00,0xff84,0x72a,
125  0x2d7f,0x83b3,0xfbb5,0xfe75
126 };
127 
128 #define PALETTE_SIZE 16
129 #include <stdint.h>
130 #include <stdlib.h>
131 #include <string.h>
132 
133 
134 namespace Pokitto {
135 
136 class Display {
137 public:
138  Display();
139 
140  // PROPERTIES
141 private:
142  static uint8_t* canvas;
143  static uint8_t bpp;
144  static uint8_t m_colordepth;
145 public:
146  static uint8_t width;
147  static uint8_t height;
148  static uint8_t screenbuffer[];
149 
150  // PROPERTIES
151  static void setColorDepth(uint8_t);
152  static uint8_t getColorDepth();
153  static uint8_t getBitsPerPixel();
154  static uint16_t getWidth();
155  static uint16_t getHeight();
156  static uint8_t getNumberOfColors();
157 
158  // IMPORTANT PUBLIC STATE MEMBERS
160  static const unsigned char * font;
162  static uint8_t persistence;
164  static uint16_t color;
166  static uint16_t bgcolor;
168  static uint16_t invisiblecolor;
170  static uint16_t directcolor;
172  static uint16_t directbgcolor;
174  static void setColor(uint8_t);
176  static void setColor(uint8_t,uint8_t);
178  static void setInvisibleColor(uint16_t);
180  static uint8_t getColor();
182  static uint8_t getBgColor();
184  static uint16_t getInvisibleColor();
185 
186 
188  static void begin();
190  static void clear();
192  static void scroll(int16_t);
194  static void fillScreen(uint16_t);
196  static void update();
198  static void lcdRefresh(unsigned char*);
200  static void clearLCD();
202  static void fillLCD(uint16_t);
204  static void showLogo();
206  static void setFrameBufferTo(uint8_t*);
207 
208  // COLORS AND PALETTE
209 public:
211  static void setDefaultPalette();
213  static uint16_t palette[PALETTE_SIZE];
215  static uint16_t *paletteptr;
217  static uint16_t RGBto565(uint8_t,uint8_t,uint8_t);
219  static uint16_t interpolateColor(uint16_t, uint16_t, uint8_t);
221  static void loadRGBPalette(const unsigned char*);
223  static void load565Palette(const uint16_t*);
225  static void rotatePalette(int8_t);
227  static void tweenPalette(uint16_t*, const uint16_t*, const uint16_t*, uint8_t);
228 
229  // DIRECT DRAWING (NO BUFFERING)
231  static void directPixel(int16_t,int16_t,uint16_t);
233  static void directRectangle(int16_t, int16_t,int16_t, int16_t, uint16_t);
235  static void setCursor(int16_t,int16_t);
237  static void directBitmap(int16_t,int16_t,const uint8_t*, uint8_t,uint8_t);
238 
239 
240  // DRAWING METHODS
242  static void drawPixel(int16_t,int16_t);
244  static void drawPixel(int16_t x,int16_t y, uint8_t col);
246  static uint8_t getPixel(int16_t,int16_t);
248  static void drawLine(int16_t,int16_t,int16_t,int16_t);
250  static uint8_t clipLine(int16_t*, int16_t*, int16_t*, int16_t*);
252  static void drawColumn(int16_t, int16_t, int16_t);
254  static void map1BitColumn(int16_t, int16_t, int16_t, const uint8_t*, uint16_t);
256  static void drawRow(int16_t, int16_t, int16_t);
258  static void drawFastVLine(int16_t, int16_t, int16_t);
260  static void drawFastHLine(int16_t, int16_t, int16_t);
262  static void drawRectangle(int16_t,int16_t,int16_t,int16_t);
264  static void fillRectangle(int16_t,int16_t,int16_t,int16_t);
266  static void fillRect(int16_t x, int16_t y, int16_t w, int16_t h);
268  static void drawRect(int16_t x, int16_t y, int16_t w, int16_t h);
269 
270  // Functions lifted from Adafruit GFX library (see PokittoDisplay.h for license //
272  static void drawCircle(int16_t x0, int16_t y0, int16_t r);
274  static void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t cornername);
276  static void fillCircle(int16_t x0, int16_t y0, int16_t r);
278  static void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t cornername, int16_t delta);
280  static void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2);
282  static void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2);
284  static void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius);
286  static void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius);
287 
288  // BITMAPS !
290  static void drawMonoBitmap(int16_t x, int16_t y, const uint8_t* bitmap, uint8_t index);
292  static void drawBitmapData(int16_t x, int16_t y, int16_t w, int16_t h, const uint8_t* bitmap);
294  static void drawBitmap(int16_t x, int16_t y, const uint8_t* bitmap);
296  static void drawRleBitmap(int16_t x, int16_t y, const uint8_t* bitmap);
298  static void drawBitmap(int16_t x, int16_t y, const uint8_t* bitmap, uint8_t frame);
300  static void drawBitmapXFlipped(int16_t x, int16_t y, const uint8_t* bitmap);
302  static void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, uint8_t rotation, uint8_t flip);
304  static uint8_t* getBuffer();
306  static uint8_t getBitmapPixel(const uint8_t*, uint16_t, uint16_t);
308  static void draw4BitColumn(int16_t x, int16_t y, uint8_t h, uint8_t* bitmap);
309 
310  // PRINTING
312  static int directChar(int16_t, int16_t, uint16_t);
314  static int bufferChar(int16_t, int16_t, uint16_t);
316  static void setFont(const unsigned char * f);
318  static uint8_t fontWidth, fontHeight;
320  static bool textWrap;
322  static void drawChar(int8_t x, int8_t y, unsigned char c, uint8_t size);
323 
324  static void enableDirectPrinting(uint8_t m);
325  static bool isDirectPrintingEnabled();
326  static int print_char(uint8_t x, uint8_t y, unsigned char c);
327  static void set_cursor(uint8_t, uint8_t);
328  static void write(uint8_t);
329  static void write(const char *str);
330  static void write(const uint8_t *buffer, uint8_t size);
331  static void print(const char[]);
332  static void print(char, int base = 0);
333  static void print(unsigned char, int base = 0);
334  static void print(int, int base = 10);
335  static void print(unsigned int, int base = 10);
336  static void print(long, int base = 10);
337  static void print(unsigned long, int base = 10);
338  static void print(double, int base = 2);
339  static void print(uint8_t, uint8_t, const char[]);
340  static void print(uint8_t, uint8_t, char, int = 0);
341  static void print(uint8_t, uint8_t, unsigned char, int = 0);
342  static void print(uint8_t, uint8_t, int, int = 10);
343  static void print(uint8_t, uint8_t, unsigned int, int = 10);
344  static void print(uint8_t, uint8_t, long, int = 10);
345  static void print(uint8_t, uint8_t, unsigned long, int = 10);
346  static void print(uint8_t, uint8_t, double, int = 2);
347  static void println(uint8_t, uint8_t, const char[]);
348  static void println(uint8_t, uint8_t, char, int = 0);
349  static void println(uint8_t, uint8_t, unsigned char, int = 0);
350  static void println(uint8_t, uint8_t, int, int = 10);
351  static void println(uint8_t, uint8_t, unsigned int, int = 10);
352  static void println(uint8_t, uint8_t, long, int = 10);
353  static void println(uint8_t, uint8_t, unsigned long, int = 10);
354  static void println(uint8_t, uint8_t, double, int = 2);
355  static void println(uint8_t, uint8_t);
356  static void println(const char[]);
357  static void println(char, int = 0);
358  static void println(unsigned char, int = 0);
359  static void println(int, int = 10);
360  static void println(unsigned int, int = 10);
361  static void println(long, int = 10 );
362  static void println(unsigned long, int = 10);
363  static void println(double, int = 2);
364  static void println(void);
365 
366  static int16_t cursorX,cursorY;
367  static uint8_t fontSize;
368  static int8_t adjustCharStep, adjustLineStep;
369  static bool fixedWidthFont;
370 
371  static void inc_txtline();
372  static void printNumber(unsigned long, uint8_t);
373  static void printFloat(double, uint8_t);
374 
377  static void loadTileset(const uint8_t*);
378 
379  static void setTileBufferTo(uint8_t*);
380  static void clearTileBuffer();
381  static void shiftTileBuffer(int8_t,int8_t);
382 
383  static void setTile(uint16_t,uint8_t);
384  static uint8_t getTile(uint16_t);
385  static uint8_t getTile(uint8_t,uint8_t);
386 
387 
388 
389 private:
390  static uint8_t m_mode;
391  static uint16_t m_w,m_h; // store these for faster access when switching printing modes
393  static uint8_t* m_scrbuf;
395  static uint8_t* m_tileset;
397  static uint8_t* m_tilebuf;
399  static uint8_t* m_tilecolorbuf;
400 
401 };
402 
403 }
404 
405 #endif // POKITTODISPLAY_H
406 
407 
408 
409 
defcolors
Definition: PokittoDisplay.h:98
static int bufferChar(int16_t, int16_t, uint16_t)
Definition: PokittoDisplay.cpp:357
static bool textWrap
Definition: PokittoDisplay.h:320
static uint16_t directbgcolor
Definition: PokittoDisplay.h:172
static uint8_t getPixel(int16_t, int16_t)
Definition: PokittoDisplay.cpp:597
static void drawFastHLine(int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:821
static const unsigned char * font
Definition: PokittoDisplay.h:160
static void drawBitmapXFlipped(int16_t x, int16_t y, const uint8_t *bitmap)
Definition: PokittoDisplay.cpp:1520
static void drawRleBitmap(int16_t x, int16_t y, const uint8_t *bitmap)
Definition: PokittoDisplay.cpp:1364
static void showLogo()
static uint16_t invisiblecolor
Definition: PokittoDisplay.h:168
static uint8_t clipLine(int16_t *, int16_t *, int16_t *, int16_t *)
Definition: PokittoDisplay.cpp:699
static void directBitmap(int16_t, int16_t, const uint8_t *, uint8_t, uint8_t)
Definition: PokittoDisplay.cpp:270
static void drawPixel(int16_t, int16_t)
Definition: PokittoDisplay.cpp:530
static uint8_t * getBuffer()
Definition: PokittoDisplay.cpp:1705
static uint16_t RGBto565(uint8_t, uint8_t, uint8_t)
Definition: PokittoPalette.cpp:82
static void fillLCD(uint16_t)
Definition: PokittoDisplay.cpp:207
static void rotatePalette(int8_t)
Definition: PokittoPalette.cpp:62
static void drawRect(int16_t x, int16_t y, int16_t w, int16_t h)
Definition: PokittoDisplay.cpp:851
static void setDefaultPalette()
Definition: PokittoDisplay.cpp:449
static void loadRGBPalette(const unsigned char *)
Definition: PokittoPalette.cpp:52
static uint16_t bgcolor
Definition: PokittoDisplay.h:166
static uint16_t interpolateColor(uint16_t, uint16_t, uint8_t)
Definition: PokittoPalette.cpp:90
static void setFont(const unsigned char *f)
Definition: PokittoDisplay.cpp:1066
static void drawRectangle(int16_t, int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:826
static void map1BitColumn(int16_t, int16_t, int16_t, const uint8_t *, uint16_t)
Definition: PokittoDisplay.cpp:761
static void loadTileset(const uint8_t *)
Definition: PokittoDisplay.cpp:2138
static void fillRectangle(int16_t, int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:833
static void drawChar(int8_t x, int8_t y, unsigned char c, uint8_t size)
Definition: PokittoDisplay.cpp:1721
static void fillRect(int16_t x, int16_t y, int16_t w, int16_t h)
Definition: PokittoDisplay.cpp:847
static void draw4BitColumn(int16_t x, int16_t y, uint8_t h, uint8_t *bitmap)
Definition: PokittoDisplay.cpp:2077
static uint16_t palette[PALETTE_SIZE]
Definition: PokittoDisplay.h:213
static uint8_t getBitmapPixel(const uint8_t *, uint16_t, uint16_t)
Definition: PokittoDisplay.cpp:1709
static void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t cornername)
Definition: PokittoDisplay.cpp:890
static void drawFastVLine(int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:816
static void lcdRefresh(unsigned char *)
Definition: PokittoDisplay.cpp:2106
Definition: PokittoDisplay.h:136
static void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap)
Definition: PokittoDisplay.cpp:1248
static uint8_t getColor()
Definition: PokittoDisplay.cpp:470
static void setInvisibleColor(uint16_t)
Definition: PokittoDisplay.cpp:466
static void scroll(int16_t)
Definition: PokittoDisplay.cpp:413
static void tweenPalette(uint16_t *, const uint16_t *, const uint16_t *, uint8_t)
Definition: PokittoPalette.cpp:119
static void load565Palette(const uint16_t *)
Definition: PokittoPalette.cpp:57
Definition: PokittoBacklight.h:42
static void drawMonoBitmap(int16_t x, int16_t y, const uint8_t *bitmap, uint8_t index)
Definition: PokittoDisplay.cpp:1072
static void begin()
Definition: PokittoDisplay.cpp:219
static void fillCircle(int16_t x0, int16_t y0, int16_t r)
Definition: PokittoDisplay.cpp:926
static uint16_t * paletteptr
Definition: PokittoDisplay.h:215
static void clear()
Definition: PokittoDisplay.cpp:394
static void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius)
Definition: PokittoDisplay.cpp:960
static void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t cornername, int16_t delta)
Definition: PokittoDisplay.cpp:931
static uint8_t persistence
Definition: PokittoDisplay.h:162
static void update()
Definition: PokittoDisplay.cpp:228
static void clearLCD()
Definition: PokittoDisplay.cpp:202
static void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius)
Definition: PokittoDisplay.cpp:974
static void setFrameBufferTo(uint8_t *)
Definition: PokittoDisplay.cpp:2130
static void drawLine(int16_t, int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:627
static void drawBitmapData(int16_t x, int16_t y, int16_t w, int16_t h, const uint8_t *bitmap)
Definition: PokittoDisplay.cpp:1256
static uint16_t directcolor
Definition: PokittoDisplay.h:170
static uint16_t getInvisibleColor()
Definition: PokittoDisplay.cpp:478
static uint8_t getBgColor()
Definition: PokittoDisplay.cpp:474
static void drawColumn(int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:789
static uint8_t fontWidth
Definition: PokittoDisplay.h:318
static void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
Definition: PokittoDisplay.cpp:990
static void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
Definition: PokittoDisplay.cpp:982
static uint16_t color
Definition: PokittoDisplay.h:164
static void fillScreen(uint16_t)
Definition: PokittoDisplay.cpp:436
static void drawRow(int16_t, int16_t, int16_t)
Definition: PokittoDisplay.cpp:802
static void drawCircle(int16_t x0, int16_t y0, int16_t r)
Definition: PokittoDisplay.cpp:855
static void directPixel(int16_t, int16_t, uint16_t)
Definition: PokittoDisplay.cpp:211
static int directChar(int16_t, int16_t, uint16_t)
Definition: PokittoDisplay.cpp:317
static void setColor(uint8_t)
Definition: PokittoDisplay.cpp:457
static void setCursor(int16_t, int16_t)
Definition: PokittoDisplay.cpp:223
static void directRectangle(int16_t, int16_t, int16_t, int16_t, uint16_t)
Definition: PokittoDisplay.cpp:215