Subversion Repositories freemyipod

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
};