-
Notifications
You must be signed in to change notification settings - Fork 0
/
pixel_dual.cpp
89 lines (56 loc) · 1.45 KB
/
pixel_dual.cpp
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
#if defined TEENSYDUINO || defined ARDUINO_AVR_NANO
#include "defines.h"
#include "pixel_dual.h"
#include "pixel_font.h"
color_t pixelDual::swap(int8_t x, int8_t y, color_t color) {
int16_t pos = index(x, y);
if (pos == -1) return color_t::black();
color_t ret = getPixelColor(pos);
setPixelColor(pos, color);
return ret;
}
void pixelDual::string(const char *_text, int16_t x_offset, int16_t y_offset) {
const uint8_t *text = (const uint8_t *) _text;
while (*text) {
if (*text < 0x21) {
x_offset += 3;
text++;
continue;
}
uint8_t index = (*text > 0x7E) ? 0x7F : *text;
character item = pixelfont[index - 0x21];
for (int x=0; x<item.width; x++) {
uint8_t column = item.data[x];
for (int y=0; y<6; y++) {
if (column & (1<<y)) {
draw(x+x_offset, y+y_offset);
}
}
}
x_offset += item.width + 1;
text++;
}
}
void pixelDual::string(const char *_text, int16_t x_offset, int16_t y_offset, color_t color) {
const uint8_t *text = (const uint8_t *) _text;
while (*text) {
if (*text < 0x21) {
x_offset += 3;
text++;
continue;
}
uint8_t index = (*text > 0x7E) ? 0x7F : *text;
character item = pixelfont[index - 0x21];
for (int x=0; x<item.width; x++) {
uint8_t column = item.data[x];
for (int y=0; y<6; y++) {
if (column & (1<<y)) {
draw(x+x_offset, y+y_offset, color);
}
}
}
x_offset += item.width + 1;
text++;
}
}
#endif //TEENSYDUINO || ARDUINO_AVR_NANO