| 881 |
theseven |
1 |
#include "global.h"
|
|
|
2 |
#include "lib/simpletextrenderer/simpletextrenderer.h"
|
|
|
3 |
#include "interface/textrenderer/textrenderer.h"
|
|
|
4 |
#include "interface/framebuffer/framebuffer.h"
|
|
|
5 |
#include "sys/util.h"
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
static const char simpletextrenderer_font_base = '!';
|
|
|
9 |
static const uint8_t simpletextrenderer_font[][5] =
|
|
|
10 |
{
|
|
|
11 |
{ 0x00, 0x00, 0x5f, 0x00, 0x00 }, // '!'
|
|
|
12 |
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // '"'
|
|
|
13 |
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // '#'
|
|
|
14 |
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // '$'
|
|
|
15 |
{ 0x23, 0x13, 0x08, 0x64, 0x62 }, // '%'
|
|
|
16 |
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // '&'
|
|
|
17 |
{ 0x05, 0x03, 0x00, 0x00, 0x00 }, // '''
|
|
|
18 |
{ 0x1c, 0x22, 0x41, 0x00, 0x00 }, // '('
|
|
|
19 |
{ 0x00, 0x00, 0x41, 0x22, 0x1c }, // ')'
|
|
|
20 |
{ 0x14, 0x08, 0x3e, 0x08, 0x14 }, // '*'
|
|
|
21 |
{ 0x08, 0x08, 0x3e, 0x08, 0x08 }, // '+'
|
|
|
22 |
{ 0x00, 0xa0, 0x60, 0x00, 0x00 }, // ','
|
|
|
23 |
{ 0x08, 0x08, 0x08, 0x08, 0x08 }, // '-'
|
|
|
24 |
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // '.'
|
|
|
25 |
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // '/'
|
|
|
26 |
{ 0x3e, 0x51, 0x49, 0x45, 0x3e }, // '0'
|
|
|
27 |
{ 0x00, 0x42, 0x7f, 0x40, 0x00 }, // '1'
|
|
|
28 |
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // '2'
|
|
|
29 |
{ 0x21, 0x41, 0x45, 0x4b, 0x31 }, // '3'
|
|
|
30 |
{ 0x18, 0x14, 0x12, 0x7f, 0x10 }, // '4'
|
|
|
31 |
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // '5'
|
|
|
32 |
{ 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // '6'
|
|
|
33 |
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // '7'
|
|
|
34 |
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // '8'
|
|
|
35 |
{ 0x06, 0x49, 0x49, 0x29, 0x1e }, // '9'
|
|
|
36 |
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // ':'
|
|
|
37 |
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ';'
|
|
|
38 |
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // '<'
|
|
|
39 |
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // '='
|
|
|
40 |
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // '>'
|
|
|
41 |
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // '?'
|
|
|
42 |
{ 0x32, 0x49, 0x79, 0x41, 0x3e }, // '@'
|
|
|
43 |
{ 0x7c, 0x12, 0x11, 0x12, 0x7c }, // 'A'
|
|
|
44 |
{ 0x7f, 0x49, 0x49, 0x49, 0x3e }, // 'B'
|
|
|
45 |
{ 0x3e, 0x41, 0x41, 0x41, 0x22 }, // 'C'
|
|
|
46 |
{ 0x7f, 0x41, 0x41, 0x22, 0x1c }, // 'D'
|
|
|
47 |
{ 0x7f, 0x49, 0x49, 0x49, 0x41 }, // 'E'
|
|
|
48 |
{ 0x7f, 0x09, 0x09, 0x09, 0x01 }, // 'F'
|
|
|
49 |
{ 0x3e, 0x41, 0x49, 0x49, 0x3a }, // 'G'
|
|
|
50 |
{ 0x7f, 0x08, 0x08, 0x08, 0x7f }, // 'H'
|
|
|
51 |
{ 0x00, 0x41, 0x7f, 0x41, 0x00 }, // 'I'
|
|
|
52 |
{ 0x20, 0x40, 0x41, 0x3f, 0x01 }, // 'J'
|
|
|
53 |
{ 0x7f, 0x08, 0x14, 0x22, 0x41 }, // 'K'
|
|
|
54 |
{ 0x7f, 0x40, 0x40, 0x40, 0x40 }, // 'L'
|
|
|
55 |
{ 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // 'M'
|
|
|
56 |
{ 0x7f, 0x04, 0x08, 0x10, 0x7f }, // 'N'
|
|
|
57 |
{ 0x3e, 0x41, 0x41, 0x41, 0x3e }, // 'O'
|
|
|
58 |
{ 0x7f, 0x09, 0x09, 0x09, 0x06 }, // 'P'
|
|
|
59 |
{ 0x3e, 0x41, 0x51, 0x21, 0x5e }, // 'Q'
|
|
|
60 |
{ 0x7f, 0x09, 0x19, 0x29, 0x46 }, // 'R'
|
|
|
61 |
{ 0x26, 0x49, 0x49, 0x49, 0x32 }, // 'S'
|
|
|
62 |
{ 0x01, 0x01, 0x7f, 0x01, 0x01 }, // 'T'
|
|
|
63 |
{ 0x3f, 0x40, 0x40, 0x40, 0x3f }, // 'U'
|
|
|
64 |
{ 0x1f, 0x20, 0x40, 0x20, 0x1f }, // 'V'
|
|
|
65 |
{ 0x7f, 0x20, 0x18, 0x20, 0x7f }, // 'W'
|
|
|
66 |
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // 'X'
|
|
|
67 |
{ 0x03, 0x04, 0x78, 0x04, 0x03 }, // 'Y'
|
|
|
68 |
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // 'Z'
|
|
|
69 |
{ 0x00, 0x7f, 0x41, 0x41, 0x00 }, // '['
|
|
|
70 |
{ 0x02, 0x04, 0x08, 0x10, 0x20 }, // '\'
|
|
|
71 |
{ 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ']'
|
|
|
72 |
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // '^'
|
|
|
73 |
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // '_'
|
|
|
74 |
{ 0x01, 0x02, 0x04, 0x00, 0x00 }, // '`'
|
|
|
75 |
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // 'a'
|
|
|
76 |
{ 0x7f, 0x44, 0x44, 0x44, 0x38 }, // 'b'
|
|
|
77 |
{ 0x38, 0x44, 0x44, 0x44, 0x28 }, // 'c'
|
|
|
78 |
{ 0x38, 0x44, 0x44, 0x44, 0x7f }, // 'd'
|
|
|
79 |
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // 'e'
|
|
|
80 |
{ 0x08, 0x7e, 0x09, 0x01, 0x02 }, // 'f'
|
|
|
81 |
{ 0x08, 0x54, 0x54, 0x54, 0x3c }, // 'g'
|
|
|
82 |
{ 0x7f, 0x04, 0x04, 0x04, 0x78 }, // 'h'
|
|
|
83 |
{ 0x00, 0x44, 0x7d, 0x40, 0x00 }, // 'i'
|
|
|
84 |
{ 0x20, 0x40, 0x40, 0x3d, 0x00 }, // 'j'
|
|
|
85 |
{ 0x7f, 0x10, 0x28, 0x44, 0x00 }, // 'k'
|
|
|
86 |
{ 0x00, 0x41, 0x7f, 0x40, 0x00 }, // 'l'
|
|
|
87 |
{ 0x7c, 0x04, 0x18, 0x04, 0x78 }, // 'm'
|
|
|
88 |
{ 0x7c, 0x08, 0x04, 0x04, 0x78 }, // 'n'
|
|
|
89 |
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // 'o'
|
|
|
90 |
{ 0x7c, 0x14, 0x14, 0x14, 0x18 }, // 'p'
|
|
|
91 |
{ 0x08, 0x14, 0x14, 0x14, 0x7c }, // 'q'
|
|
|
92 |
{ 0x7c, 0x08, 0x04, 0x04, 0x08 }, // 'r'
|
|
|
93 |
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // 's'
|
|
|
94 |
{ 0x04, 0x3f, 0x44, 0x40, 0x20 }, // 't'
|
|
|
95 |
{ 0x3c, 0x40, 0x40, 0x20, 0x7c }, // 'u'
|
|
|
96 |
{ 0x1c, 0x20, 0x40, 0x20, 0x1c }, // 'v'
|
|
|
97 |
{ 0x3c, 0x40, 0x38, 0x40, 0x3c }, // 'w'
|
|
|
98 |
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // 'x'
|
|
|
99 |
{ 0x0c, 0x50, 0x50, 0x50, 0x3c }, // 'y'
|
|
|
100 |
{ 0x44, 0x64, 0x54, 0x4c, 0x44 }, // 'z'
|
|
|
101 |
{ 0x00, 0x08, 0x36, 0x41, 0x00 }, // '{'
|
|
|
102 |
{ 0x00, 0x00, 0x77, 0x00, 0x00 }, // '|'
|
|
|
103 |
{ 0x00, 0x41, 0x36, 0x08, 0x00 }, // '}'
|
|
|
104 |
{ 0x02, 0x01, 0x02, 0x04, 0x02 }, // '~'
|
|
|
105 |
};
|
|
|
106 |
|
|
|
107 |
static void simpletextrenderer_init(const struct textrenderer_instance* instance)
|
|
|
108 |
{
|
|
|
109 |
}
|
|
|
110 |
|
|
|
111 |
static int simpletextrenderer_get_line_height(const struct textrenderer_instance* instance)
|
|
|
112 |
{
|
|
|
113 |
return 8;
|
|
|
114 |
}
|
|
|
115 |
|
|
|
116 |
static int simpletextrenderer_get_max_width(const struct textrenderer_instance* instance)
|
|
|
117 |
{
|
|
|
118 |
return 6;
|
|
|
119 |
}
|
|
|
120 |
|
|
|
121 |
static int simpletextrenderer_render_char(const struct textrenderer_instance* instance,
|
|
|
122 |
const struct framebuffer_instance* fb, int x, int y, uint32_t color, char c)
|
|
|
123 |
{
|
|
|
124 |
uint32_t idx = c - simpletextrenderer_font_base;
|
|
|
125 |
if (idx >= ARRAYLEN(simpletextrenderer_font)) return 6;
|
|
|
126 |
const uint8_t* font = simpletextrenderer_font[idx];
|
|
|
127 |
int width = 5;
|
|
|
128 |
while (width--)
|
|
|
129 |
{
|
|
|
130 |
int pixels = *font++;
|
|
|
131 |
int i;
|
|
|
132 |
for (i = 0; i < 8; i++)
|
|
|
133 |
{
|
|
|
134 |
if (pixels & 1) framebuffer_set_pixel(fb, x, y + i, color);
|
|
|
135 |
pixels >>= 1;
|
|
|
136 |
}
|
|
|
137 |
x++;
|
|
|
138 |
}
|
|
|
139 |
return 6;
|
|
|
140 |
}
|
|
|
141 |
|
|
|
142 |
|
|
|
143 |
const struct textrenderer_driver simpletextrenderer_driver =
|
|
|
144 |
{
|
|
|
145 |
.init = simpletextrenderer_init,
|
|
|
146 |
.get_line_height = simpletextrenderer_get_line_height,
|
|
|
147 |
.get_max_width = simpletextrenderer_get_max_width,
|
|
|
148 |
.render_char = simpletextrenderer_render_char,
|
|
|
149 |
};
|