Subversion Repositories libOLED

Rev

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