Rev 13 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | mjames | 1 | /* |
2 | * font.cpp |
||
3 | * |
||
4 | * Created on: 31 Oct 2020 |
||
5 | * Author: mike |
||
6 | */ |
||
7 | #include "libOLED/fontclass.H" |
||
8 | |||
10 | mjames | 9 | char font5x7_t::getPixel(char c, int x, int y) |
2 | mjames | 10 | { |
17 | mjames | 11 | // optional scaling |
12 | if (m_mult != 1 || m_shift != 0) |
||
13 | { |
||
14 | x = (x * m_mult + m_round/2) >> m_shift; |
||
15 | y = (y * m_mult + m_round/2) >> m_shift; |
||
16 | } |
||
17 | |||
18 | |||
4 | mjames | 19 | if (x < 0 || x >= m_width) |
2 | mjames | 20 | return 0; |
4 | mjames | 21 | if (y < 0 || y >= m_height) |
2 | mjames | 22 | return 0; |
4 | mjames | 23 | uint8_t pixels = 0; |
2 | mjames | 24 | if (c < ' ') |
25 | c = ' '; |
||
26 | if (c >= ' ' && c <= 0x7f) |
||
27 | pixels = m_data[(c - ' ') * m_width + x]; |
||
13 | mjames | 28 | if (c == '\xb0') |
10 | mjames | 29 | pixels = m_data[(0x80 - ' ') * m_width + x]; |
30 | // handle extended char set |
||
31 | if (c >= 0x81 && c <= 0x81) |
||
32 | pixels = m_data[(0x81 - ' ') * m_width + x]; |
||
2 | mjames | 33 | |
4 | mjames | 34 | char v = (pixels >> y) & 1; |
35 | return v; |
||
2 | mjames | 36 | } |
37 | |||
10 | mjames | 38 | char font10x18_t::getPixel(char c, int x, int y) |
2 | mjames | 39 | { |
17 | mjames | 40 | |
41 | // optional scaling |
||
42 | if (m_mult != 1 || m_shift != 0) |
||
43 | { |
||
44 | x = (x * m_mult + m_round) >> m_shift; |
||
45 | y = (y * m_mult + m_round) >> m_shift; |
||
46 | } |
||
47 | |||
4 | mjames | 48 | if (x < 0 || x >= m_width) |
2 | mjames | 49 | return 0; |
4 | mjames | 50 | if (y < 0 || y >= m_height) |
2 | mjames | 51 | return 0; |
3 | mjames | 52 | |
17 | mjames | 53 | |
2 | mjames | 54 | if (c < ' ') |
55 | c = ' '; |
||
17 | mjames | 56 | else if (c == 0xB0) |
57 | c = 128; |
||
13 | mjames | 58 | else if (c >= m_chars + ' ') |
4 | mjames | 59 | c = ' '; |
13 | mjames | 60 | // bit offset into pixel row |
5 | mjames | 61 | int xm = x + (c - ' ') * m_width; |
17 | mjames | 62 | // row start address : rounding up |
63 | int ym = y * ((m_width * m_chars + 7) / 8); |
||
64 | int index = ym + xm / 8; |
||
4 | mjames | 65 | return ((m_data[index]) >> (xm & 7)) & 1; |
2 | mjames | 66 | } |
67 | |||
68 | static const char font5x7_data[] = |
||
10 | mjames | 69 | { |
70 | 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 32 |
||
71 | 0x00, 0x00, 0x6f, 0x00, 0x00, // ! 0x21 33 |
||
72 | 0x00, 0x07, 0x00, 0x07, 0x00, // " 0x22 34 |
||
73 | 0x14, 0x7f, 0x14, 0x7f, 0x14, // # 0x23 35 |
||
74 | 0x2e, 0x2a, 0xff, 0x2a, 0x3a, // $ 0x24 36 |
||
75 | 0x23, 0x13, 0x08, 0x64, 0x62, // % 0x25 37 |
||
76 | 0x36, 0x49, 0x56, 0x20, 0x50, // & 0x26 38 |
||
77 | 0x00, 0x00, 0x07, 0x00, 0x00, // ' 0x27 39 |
||
78 | 0x00, 0x1c, 0x22, 0x41, 0x00, // ( 0x28 40 |
||
79 | 0x00, 0x41, 0x22, 0x1c, 0x00, // ) 0x29 41 |
||
80 | 0x14, 0x08, 0x3e, 0x08, 0x14, // * 0x2a 42 |
||
81 | 0x08, 0x08, 0x3e, 0x08, 0x08, // + 0x2b 43 |
||
82 | 0x00, 0x50, 0x30, 0x00, 0x00, // , 0x2c 44 |
||
83 | 0x08, 0x08, 0x08, 0x08, 0x08, // - 0x2d 45 |
||
84 | 0x00, 0x60, 0x60, 0x00, 0x00, // . 0x2e 46 |
||
85 | 0x20, 0x10, 0x08, 0x04, 0x02, // / 0x2f 47 |
||
86 | 0x3e, 0x51, 0x49, 0x45, 0x3e, // 0 0x30 48 |
||
87 | 0x00, 0x42, 0x7f, 0x40, 0x00, // 1 0x31 49 |
||
88 | 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x32 50 |
||
89 | 0x21, 0x41, 0x45, 0x4b, 0x31, // 3 0x33 51 |
||
90 | 0x18, 0x14, 0x12, 0x7f, 0x10, // 4 0x34 52 |
||
91 | 0x27, 0x45, 0x45, 0x45, 0x39, // 5 0x35 53 |
||
92 | 0x3c, 0x4a, 0x49, 0x49, 0x30, // 6 0x36 54 |
||
93 | 0x01, 0x71, 0x09, 0x05, 0x03, // 7 0x37 55 |
||
94 | 0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x38 56 |
||
95 | 0x06, 0x49, 0x49, 0x29, 0x1e, // 9 0x39 57 |
||
96 | 0x00, 0x36, 0x36, 0x00, 0x00, // : 0x3a 58 |
||
97 | 0x00, 0x56, 0x36, 0x00, 0x00, // ; 0x3b 59 |
||
98 | 0x08, 0x14, 0x22, 0x41, 0x00, // < 0x3c 60 |
||
99 | 0x14, 0x14, 0x14, 0x14, 0x14, // = 0x3d 61 |
||
100 | 0x00, 0x41, 0x22, 0x14, 0x08, // > 0x3e 62 |
||
101 | 0x02, 0x01, 0x51, 0x09, 0x06, // ? 0x3f 63 |
||
102 | 0x3e, 0x41, 0x5d, 0x49, 0x4e, // @ 0x40 64 |
||
103 | 0x7e, 0x09, 0x09, 0x09, 0x7e, // A 0x41 65 |
||
104 | 0x7f, 0x49, 0x49, 0x49, 0x36, // B 0x42 66 |
||
105 | 0x3e, 0x41, 0x41, 0x41, 0x22, // C 0x43 67 |
||
106 | 0x7f, 0x41, 0x41, 0x41, 0x3e, // D 0x44 68 |
||
107 | 0x7f, 0x49, 0x49, 0x49, 0x41, // E 0x45 69 |
||
108 | 0x7f, 0x09, 0x09, 0x09, 0x01, // F 0x46 70 |
||
109 | 0x3e, 0x41, 0x49, 0x49, 0x7a, // G 0x47 71 |
||
110 | 0x7f, 0x08, 0x08, 0x08, 0x7f, // H 0x48 72 |
||
111 | 0x00, 0x41, 0x7f, 0x41, 0x00, // I 0x49 73 |
||
112 | 0x20, 0x40, 0x41, 0x3f, 0x01, // J 0x4a 74 |
||
113 | 0x7f, 0x08, 0x14, 0x22, 0x41, // K 0x4b 75 |
||
114 | 0x7f, 0x40, 0x40, 0x40, 0x40, // L 0x4c 76 |
||
115 | 0x7f, 0x02, 0x0c, 0x02, 0x7f, // M 0x4d 77 |
||
116 | 0x7f, 0x04, 0x08, 0x10, 0x7f, // N 0x4e 78 |
||
117 | 0x3e, 0x41, 0x41, 0x41, 0x3e, // O 0x4f 79 |
||
118 | 0x7f, 0x09, 0x09, 0x09, 0x06, // P 0x50 80 |
||
119 | 0x3e, 0x41, 0x51, 0x21, 0x5e, // Q 0x51 81 |
||
120 | 0x7f, 0x09, 0x19, 0x29, 0x46, // R 0x52 82 |
||
121 | 0x46, 0x49, 0x49, 0x49, 0x31, // S 0x53 83 |
||
122 | 0x01, 0x01, 0x7f, 0x01, 0x01, // T 0x54 84 |
||
123 | 0x3f, 0x40, 0x40, 0x40, 0x3f, // U 0x55 85 |
||
124 | 0x0f, 0x30, 0x40, 0x30, 0x0f, // V 0x56 86 |
||
125 | 0x3f, 0x40, 0x30, 0x40, 0x3f, // W 0x57 87 |
||
126 | 0x63, 0x14, 0x08, 0x14, 0x63, // X 0x58 88 |
||
127 | 0x07, 0x08, 0x70, 0x08, 0x07, // Y 0x59 89 |
||
128 | 0x61, 0x51, 0x49, 0x45, 0x43, // Z 0x5a 90 |
||
129 | 0x00, 0x00, 0x7f, 0x41, 0x00, // [ 0x5b 91 |
||
130 | 0x02, 0x04, 0x08, 0x10, 0x20, // \ 0x5c 92 |
||
131 | 0x00, 0x41, 0x7f, 0x00, 0x00, // ] 0x5d 93 |
||
132 | 0x04, 0x02, 0x01, 0x02, 0x04, // ^ 0x5e 94 |
||
133 | 0x40, 0x40, 0x40, 0x40, 0x40, // _ 0x5f 95 |
||
134 | 0x00, 0x00, 0x03, 0x04, 0x00, // ` 0x60 96 |
||
135 | 0x20, 0x54, 0x54, 0x54, 0x78, // a 0x61 97 |
||
136 | 0x7f, 0x48, 0x44, 0x44, 0x38, // b 0x62 98 |
||
137 | 0x38, 0x44, 0x44, 0x44, 0x44, // c 0x63 99 |
||
138 | 0x38, 0x44, 0x44, 0x48, 0x7f, // d 0x64 100 |
||
139 | 0x38, 0x54, 0x54, 0x54, 0x18, // e 0x65 101 |
||
140 | 0x08, 0x7e, 0x09, 0x01, 0x02, // f 0x66 102 |
||
141 | 0x0c, 0x52, 0x52, 0x52, 0x3e, // g 0x67 103 |
||
142 | 0x7f, 0x08, 0x04, 0x04, 0x78, // h 0x68 104 |
||
143 | 0x00, 0x44, 0x7d, 0x40, 0x00, // i 0x69 105 |
||
144 | 0x20, 0x40, 0x44, 0x3d, 0x00, // j 0x6a 106 |
||
145 | 0x00, 0x7f, 0x10, 0x28, 0x44, // k 0x6b 107 |
||
146 | 0x00, 0x41, 0x7f, 0x40, 0x00, // l 0x6c 108 |
||
147 | 0x7c, 0x04, 0x18, 0x04, 0x78, // m 0x6d 109 |
||
148 | 0x7c, 0x08, 0x04, 0x04, 0x78, // n 0x6e 110 |
||
149 | 0x38, 0x44, 0x44, 0x44, 0x38, // o 0x6f 111 |
||
150 | 0x7c, 0x14, 0x14, 0x14, 0x08, // p 0x70 112 |
||
151 | 0x08, 0x14, 0x14, 0x14, 0x7c, // q 0x71 113 |
||
152 | 0x7c, 0x08, 0x04, 0x04, 0x08, // r 0x72 114 |
||
153 | 0x48, 0x54, 0x54, 0x54, 0x20, // s 0x73 115 |
||
154 | 0x04, 0x3f, 0x44, 0x40, 0x20, // t 0x74 116 |
||
155 | 0x3c, 0x40, 0x40, 0x20, 0x7c, // u 0x75 117 |
||
156 | 0x1c, 0x20, 0x40, 0x20, 0x1c, // v 0x76 118 |
||
157 | 0x3c, 0x40, 0x30, 0x40, 0x3c, // w 0x77 119 |
||
158 | 0x44, 0x28, 0x10, 0x28, 0x44, // x 0x78 120 |
||
159 | 0x0c, 0x50, 0x50, 0x50, 0x3c, // y 0x79 121 |
||
160 | 0x44, 0x64, 0x54, 0x4c, 0x44, // z 0x7a 122 |
||
161 | 0x00, 0x08, 0x36, 0x41, 0x41, // 0x7b 123 |
||
162 | 0x00, 0x00, 0x7f, 0x00, 0x00, // | 0x7c 124 |
||
163 | 0x41, 0x41, 0x36, 0x08, 0x00, // 0x7d 125 |
||
164 | 0x08, 0x0c, 0x08, 0x18, 0x08, // ~ 0x7e 126 |
||
165 | 0x55, 0x2A, 0x55, 0x2A, 0x55, // 0x7F 127 |
||
166 | 0x00, 0x06, 0x09, 0x06, 0x00, // 0x80 (remapped in code) a degrees sign |
||
167 | 0x49, 0x7f, 0x49, 0x49, 0x36, // 0x81 (remapped in code) a sort of Bluetooth symbol// (1<<2) / 5 sized large font 4/5 |
||
168 |