-
Notifications
You must be signed in to change notification settings - Fork 181
/
UTFTGLUE.h
198 lines (187 loc) · 7.78 KB
/
UTFTGLUE.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*
* utftglue.h @@@@@@@@@@@@@@@@@@@@@@@@ LIBRARY @@@@@@@@@@@@@@@@@@@@@@@@@
*
* Created: 12/05/2019 14:25:06
* Author: David Prentice
*
* 1. replace "UTFT.h" with "UTFTGLUE.h"
* 2. replace UTFT constructor with UTFTGLUE(model_ID, 0,0,0,0,0)
* 3. remove smallFont, BigFont, SeveSegNumFont declarations
* 4. UTFTGLUE uses FreeFonts or NULL (System 5x7)
*
* 5. knows FreeSmallFont, FreeBigFont and FreeSevenSegNumFont
* 6. any other Fonts just need to #include "FreeOtherXXX.h"
* 7. #define OtherXXX &FreeOtherXXX
*/
#warning @@@@@@@@@@@@@@@@@@@@@@@@@ <UTFTGLUE.h> @@@@@@@@@@@@@@@@@@@@@@@@@@
#ifndef UTFTGLUE_H_
#define UTFTGLUE_H_
#define LEFT 0
#define RIGHT 9999
#define CENTER 9998
#define PORTRAIT 0
#define LANDSCAPE 1
#include <MCUFRIEND_kbv.h>
#include <Adafruit_GFX.h>
#if defined(__arm__) && !defined(TEENSYDUINO)
#include <avr/dtostrf.h>
#endif
#include <FreeDefaultFonts.h>
#define SmallFont &FreeSmallFont
#define BigFont &FreeBigFont
#define SevenSegNumFont &FreeSevenSegNumFont
class UTFTGLUE : public MCUFRIEND_kbv
{
public:
// UTFTGLUE() : MCUFRIEND_kbv() {}
UTFTGLUE(int model_ID, int RS, int WR,int CS, int RST, int RD = A0)
: MCUFRIEND_kbv(CS, RS, WR, RD, RST) { _model_ID = model_ID; }
void InitLCD(byte orientation=LANDSCAPE) {
MCUFRIEND_kbv::reset();
uint16_t ID = MCUFRIEND_kbv::readID();
// if (ID == 0) ID = 0x9341; //DealExtreme with EXTC=0
// if (ID == 0x8989) ID = 0x1289;
// if (ID == 0xD3D3) ID = 0x9481; //write-only controller
// if (ID == 0xD3D3) ID = 0x9486; //write-only controller
if (ID == 0xD3D3) ID = 0x9090; //write-only controller HX8357-D
// if (ID == 0x9327 && orientation == LANDSCAPE) orientation = 3;
MCUFRIEND_kbv::begin(ID);
MCUFRIEND_kbv::setRotation(_orient = orientation);
_radius = 4;
}
void clrScr() { MCUFRIEND_kbv::fillScreen(0x0000);}
void drawPixel(int x, int y) { MCUFRIEND_kbv::drawPixel(x, y, _fcolor);}
void drawLine(int x1, int y1, int x2, int y2) { MCUFRIEND_kbv::drawLine(x1, y1, x2, y2, _fcolor);}
void fillScr(uint16_t color) { MCUFRIEND_kbv::fillScreen(color);}
void fillScr(byte r, byte g, byte b) { MCUFRIEND_kbv::fillScreen(setrgb(r, g, b));}
void drawRect(int x1, int y1, int x2, int y2) {
int w = x2 - x1 + 1, h = y2 - y1 + 1;
if (w < 0) { x1 = x2; w = -w; }
if (h < 0) { y1 = y2; h = -h; }
MCUFRIEND_kbv::drawRect(x1, y1, w, h, _fcolor);
}
void drawRoundRect(int x1, int y1, int x2, int y2) {
int w = x2 - x1 + 1, h = y2 - y1 + 1;
if (w < 0) { x1 = x2; w = -w; }
if (h < 0) { y1 = y2; h = -h; }
MCUFRIEND_kbv::drawRoundRect(x1, y1, w, h, _radius, _fcolor);
}
void fillRect(int x1, int y1, int x2, int y2) {
int w = x2 - x1 + 1, h = y2 - y1 + 1;
if (w < 0) { x1 = x2; w = -w; }
if (h < 0) { y1 = y2; h = -h; }
MCUFRIEND_kbv::fillRect(x1, y1, w, h, _fcolor);
}
void fillRoundRect(int x1, int y1, int x2, int y2) {
int w = x2 - x1 + 1, h = y2 - y1 + 1;
if (w < 0) { x1 = x2; w = -w; }
if (h < 0) { y1 = y2; h = -h; }
MCUFRIEND_kbv::fillRoundRect(x1, y1, w, h, _radius, _fcolor);
}
void drawCircle(int x, int y, int radius) { MCUFRIEND_kbv::drawCircle(x, y, radius, _fcolor);}
void fillCircle(int x, int y, int radius) { MCUFRIEND_kbv::fillCircle(x, y, radius, _fcolor);}
void setColor(byte r, byte g, byte b) { setColor(setrgb(r, g, b));}
void setColor(uint16_t c) { MCUFRIEND_kbv::setTextColor(_fcolor = c, _bcolor); }
void setBackColor(byte r, byte g, byte b) { setBackColor(setrgb(r, g, b)); }
void setBackColor(uint32_t c) {
if (c == 0xFFFFFFFF) _bcolor = _fcolor;
else _bcolor = c;
MCUFRIEND_kbv::setTextColor(_fcolor, _bcolor);
}
void print(const char *st, int x, int y, int deg=0) {
settextcursor((char*)st, x, y); MCUFRIEND_kbv::print(st);}
void print(char *st, int x, int y, int deg=0) {
settextcursor(st, x, y); MCUFRIEND_kbv::print(st);}
void print(String st, int x, int y, int deg=0) {
settextcursor((char*)(st.c_str()), x, y); MCUFRIEND_kbv::print(st);}
void printNumI(long num, int x, int y, int length=0, char filler=' ') {
printNumF(num, 0, x, y, '.', length, filler);
}
void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ') {
char buf[20];
dtostrf(num, length, dec, buf);
for (int i = 0; buf[i] == ' '; i++) buf[i] = filler;
settextcursor(buf, x, y, length * _dig_wid * MCUFRIEND_kbv::textsize_x);
MCUFRIEND_kbv::print(buf);
}
void setTextSize(int sz) { MCUFRIEND_kbv::setTextSize(gfxFont == NULL ? sz : 1); } // ####### GFX ########
void setFont(const GFXfont* font) {
MCUFRIEND_kbv::setFont(font);
_ascend = 8;
_descend = 1;
_dig_wid = 6;
if (font != NULL) {
int16_t x = 0, y = 0, x1, y1 = 0, x2, y2 = 0;
MCUFRIEND_kbv::setTextSize(1);
charBounds('0', &x, &y, &x1, &y1, &x2, &y2);
_ascend = y2 - y1; //yAdvance
_dig_wid = x; //xAdvance
}
}
void drawBitmap(int x, int y, int sx, int sy, const uint16_t *data, int scale=1) {
uint16_t color;
MCUFRIEND_kbv::setAddrWindow(x, y, x + sx*scale - 1, y + sy*scale - 1);
if (scale == 1) MCUFRIEND_kbv::pushColors((const uint8_t*)data, sx * sy, 1);
else {
for (int row = 0; row < sy; row++) {
for (int col = 0; col < sx; col++) {
color = pgm_read_word(data + (row*sx + col)*1);
MCUFRIEND_kbv::fillRect(x+col*scale, y+row*scale, scale, scale, color);
}
}
}
}
// void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy);
// void lcdOff();
// void lcdOn();
void setContrast(char c) {}
int getDisplayXSize() { return MCUFRIEND_kbv::width(); }
int getDisplayYSize() { return MCUFRIEND_kbv::height(); }
void setBrightness(byte br) {}
// void LCD_Write_DATA(char VH,char VL);
// void dispBitmap(File inFile);
uint8_t _ascend, _descend, _dig_wid;
uint16_t _model_ID;
protected:
uint16_t _fcolor;
uint16_t _bcolor;
// uint8_t _ascend, _descend, _dig_wid;
uint8_t _radius;
uint8_t _orient;
void settextcursor(char *st, int x, int y, int pad = 0) {
int16_t pos, x1, y1;
uint16_t len, w, h;
bool is_gfx = (MCUFRIEND_kbv::gfxFont != NULL);
getTextBounds(st, 0, 0, &x1, &y1, &w, &h); //always
len = x1 + w + 0; // assumes the final right padding = 1.
if (pad >= len) pad = pad - len;
pos = (MCUFRIEND_kbv::width() - len - pad);
if (x == CENTER) x = pos/2;
else if (x == RIGHT) x = pos - 1;
if (is_gfx) { //only GFX fonts need to paint background
h = _ascend + _descend; //pgm_read_byte(&gfxFont->yAdvance);
if (_fcolor != _bcolor) MCUFRIEND_kbv::fillRect(x, y, len + pad + 1, h, _bcolor);
y += h;
}
MCUFRIEND_kbv::setCursor(x + pad, y);
}
uint16_t setrgb(byte r, byte g, byte b) { return ((r&0xF8) << 8) | ((g&0xFC) << 3) | (b>>3);}
};
#define VGA_BLACK 0x0000
#define VGA_WHITE 0xFFFF
#define VGA_RED 0xF800
#define VGA_GREEN 0x0400
#define VGA_BLUE 0x001F
#define VGA_SILVER 0xC618
#define VGA_GRAY 0x8410
#define VGA_MAROON 0x8000
#define VGA_YELLOW 0xFFE0
#define VGA_OLIVE 0x8400
#define VGA_LIME 0x07E0
#define VGA_AQUA 0x07FF
#define VGA_TEAL 0x0410
#define VGA_NAVY 0x0010
#define VGA_FUCHSIA 0xF81F
#define VGA_PURPLE 0x8010
#define VGA_TRANSPARENT 0xFFFFFFFF
#endif /* UTFTGLUE_H_ */