summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/displayapp/fonts/neofont.c409
1 files changed, 316 insertions, 93 deletions
diff --git a/src/displayapp/fonts/neofont.c b/src/displayapp/fonts/neofont.c
index a3adde4..de6381b 100644
--- a/src/displayapp/fonts/neofont.c
+++ b/src/displayapp/fonts/neofont.c
@@ -21,220 +21,431 @@
0 + (o<<1) + (n<<2) + (m<<3) + (l << 4) + (k << 5) + (j << 6) + (i << 7) \
}
+#define NEOFONT_SET_CHAR(lhs, \
+ a,b,c, \
+ d,e,f, \
+ g,h,i, \
+ j,k,l, \
+ m,n,o \
+) \
+do { \
+ (lhs)[0] = h + (g<<1) + (f<<2) + (e<<3) + (d << 4) + (c << 5) + (b << 6) + (a << 7); \
+ (lhs)[1] = 0 + (o<<1) + (n<<2) + (m<<3) + (l << 4) + (k << 5) + (j << 6) + (i << 7); \
+} while(0)
+
#define X 1
#define _ 0
-static const uint8_t glyphs[][2] = {
+// https://en.wikipedia.org/wiki/ASCII#Printable_characters
+static const uint8_t glyphs[96][2] = {
+ // ASCII 0x20 [space]
+ G( _, _, _,
+ _, _, _,
+ _, _, _,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x21 {!}
+ G( _, X, _,
+ _, X, _,
+ _, X, _,
+ _, _, _,
+ _, X, _ ),
+
+ // ASCII 0x22 {"}
+ G( X, _, X,
+ X, _, X,
+ _, _, _,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x23 {#}
+ G( X, _, X,
+ X, X, X,
+ X, _, X,
+ X, X, X,
+ X, _, X ),
+
+ // ASCII 0x24 {$}
+ G( _, X, X,
+ X, X, _,
+ _, X, _,
+ _, X, X,
+ X, X, _ ),
+
+ // ASCII 0x25 {%}
+ G( X, _, _,
+ _, _, X,
+ _, X, _,
+ X, _, _,
+ _, _, X ),
+
+ // ASCII 0x26 {&}
+ G( _, X, _,
+ X, _, _,
+ X, X, X,
+ X, X, _,
+ _, X, X ),
+
+ // ASCII 0x27 {'}
+ G( _, X, _,
+ _, X, _,
+ _, _, _,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x28 "("
+ G( _, _, X,
+ _, X, _,
+ _, X, _,
+ _, X, _,
+ _, _, X ),
+
+ // ASCII 0x29 ")"
+ G( X, _, _,
+ _, X, _,
+ _, X, _,
+ _, X, _,
+ X, _, _ ),
+
+ // ASCII 0x2A "*"
+ G( X, _, X,
+ _, X, _,
+ X, _, X,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x2B "+"
+ G( _, _, _,
+ _, X, _,
+ X, X, X,
+ _, X, _,
+ _, _, _ ),
+
+ // ASCII 0x2C ","
+ G( _, _, _,
+ _, _, _,
+ _, _, _,
+ _, X, _,
+ X, _, _ ),
+
+ // ASCII 0x2D "-"
+ G( _, _, _,
+ _, _, _,
+ X, X, X,
+ _, _, _,
+ _, _, _ ),
+
+
+ // ASCII 0x2E "."
+ G( _, _, _,
+ _, _, _,
+ _, _, _,
+ _, X, _,
+ _, _, _ ),
+
+ // ASCII 0x2F "/"
+ G( _, _, _,
+ _, _, X,
+ _, X, _,
+ X, _, _,
+ _, _, _ ),
+
+ // ASCII 0x30 "0"
G( _, X, _,
X, _, X,
X, _, X,
X, _, X,
_, X, _ ),
+ // ASCII 0x31 "1"
G( _, X, _,
X, X, _,
_, X, _,
_, X, _,
X, X, X ),
+ // ASCII 0x32 "2"
G( X, X, _,
_, _, X,
_, _, X,
_, X, _,
X, X, X ),
+ // ASCII 0x33 "3"
G( X, X, _,
_, _, X,
_, X, _,
_, _, X,
X, X, _ ),
+ // ASCII 0x34 "4"
G( _, _, X,
_, X, X,
X, _, X,
X, X, X,
_, _, X ),
+ // ASCII 0x35 "5"
G( X, X, X,
X, _, _,
X, X, _,
_, _, X,
X, X, _ ),
+ // ASCII 0x36 "6"
G( _, X, X,
X, _, _,
X, X, _,
X, _, X,
_, X, _ ),
+ // ASCII 0x37 "7"
G( X, X, X,
_, _, X,
_, _, X,
_, X, _,
_, X, _ ),
+ // ASCII 0x38 "8"
G( _, X, _,
X, _, X,
_, X, _,
X, _, X,
_, X, _ ),
+ // ASCII 0x39 "9"
G( _, X, _,
X, _, X,
_, X, X,
_, _, X,
X, X, _ ),
+ // ASCII 0x3A ":"
+ G( _, _, _,
+ _, X, _,
+ _, _, _,
+ _, X, _,
+ _, _, _ ),
+
+ // ASCII 0x3B ";"
+ G( _, _, _,
+ _, X, _,
+ _, _, _,
+ _, X, _,
+ X, _, _ ),
+
+ // ASCII 0x3C "<"
+ G( _, _, X,
+ _, X, _,
+ X, _, _,
+ _, X, _,
+ _, _, X ),
+
+ // ASCII 0x3D "="
+ G( _, _, _,
+ X, X, X,
+ _, _, _,
+ X, X, X,
+ _, _, _ ),
+
+ // ASCII 0x3E ">"
+ G( X, _, _,
+ _, X, _,
+ _, _, X,
+ _, X, _,
+ X, _, _ ),
+
+ // ASCII 0x3F "?"
+ G( X, X, _,
+ _, _, X,
+ _, X, _,
+ _, _, _,
+ _, X, _ ),
+
+ // ASCII 0x40 "@"
+ G( _, X, _,
+ X, _, X,
+ X, _, X,
+ X, _, _,
+ _, X, X ),
+
+ // ASCII 0x41 "A"
G( _, X, _,
X, _, X,
X, _, X,
X, X, X,
X, _, X ),
+ // ASCII 0x42 "B"
G( X, X, _,
X, _, X,
X, X, _,
X, _, X,
X, X, _ ),
+ // ASCII 0x43 "C"
G( _, X, X,
X, _, _,
X, _, _,
X, _, _,
_, X, X ),
+ // ASCII 0x44 "D"
G( X, X, _,
X, _, X,
X, _, X,
X, _, X,
X, X, _ ),
+ // ASCII 0x45 "E"
G( X, X, X,
X, _, _,
X, X, _,
X, _, _,
X, X, X ),
+ // ASCII 0x46 "F"
G( X, X, X,
X, _, _,
- X, X, _,
+ X, X, X,
X, _, _,
X, _, _ ),
+ // ASCII 0x47 "G"
G( _, X, X,
X, _, _,
X, _, _,
X, _, X,
_, X, X ),
+ // ASCII 0x48 "H"
G( X, _, X,
X, _, X,
X, X, X,
X, _, X,
X, _, X ),
+ // ASCII 0x49 "I"
G( X, X, X,
_, X, _,
_, X, _,
_, X, _,
X, X, X ),
+ // ASCII 0x4A "J"
G( X, X, X,
_, _, X,
_, _, X,
X, _, X,
_, X, _ ),
+ // ASCII 0x4B "K"
G( X, _, X,
X, _, X,
X, X, _,
X, _, X,
X, _, X ),
+ // ASCII 0x4C "L"
G( X, _, _,
X, _, _,
X, _, _,
X, _, _,
X, X, X ),
+ // ASCII 0x4D "M"
G( X, _, X,
X, X, X,
X, _, X,
X, _, X,
X, _, X ),
+ // ASCII 0x4E "N"
G( X, X, _,
X, _, X,
X, _, X,
X, _, X,
X, _, X ),
+ // ASCII 0x4F "O"
G( X, X, X,
X, _, X,
X, _, X,
X, _, X,
X, X, X ),
+ // ASCII 0x50 "P"
G( X, X, X,
X, _, X,
X, X, X,
X, _, _,
X, _, _ ),
+ // ASCII 0x51 "Q"
G( _, X, _,
X, _, X,
X, _, X,
X, _, X,
_, X, X ),
+ // ASCII 0x52 "R"
G( X, X, _,
X, _, X,
X, X, _,
X, _, X,
X, _, X ),
+ // ASCII 0x53 "S"
G( _, X, X,
X, _, _,
_, X, _,
_, _, X,
X, X, _ ),
+ // ASCII 0x54 "T"
G( X, X, X,
_, X, _,
_, X, _,
_, X, _,
_, X, _ ),
+ // ASCII 0x55 "U"
G( X, _, X,
X, _, X,
X, _, X,
X, _, X,
X, X, X ),
+ // ASCII 0x56 "V"
G( X, _, X,
X, _, X,
X, _, X,
_, X, _,
_, X, _ ),
+ // ASCII 0x57 "W"
G( X, _, X,
X, _, X,
X, X, X,
X, X, X,
X, _, X ),
+ // ASCII 0x58 "X"
G( X, _, X,
X, _, X,
_, X, _,
X, _, X,
X, _, X ),
+ // ASCII 0x59 "Y"
G( X, _, X,
X, _, X,
_, X, _,
_, X, _,
_, X, _ ),
+ // ASCII 0x5A "Z"
G( X, X, X,
_, _, X,
_, X, _,
@@ -242,156 +453,224 @@ static const uint8_t glyphs[][2] = {
X, X, X ),
+ // ASCII 0x5B "["
+ G( _, X, X,
+ _, X, _,
+ _, X, _,
+ _, X, _,
+ _, X, X ),
+
+ // ASCII 0x5B {\}
+ G( _, _, _,
+ X, _, _,
+ _, X, _,
+ _, _, X,
+ _, _, _ ),
+
+ // ASCII 0x5D "]"
+ G( X, X, _,
+ _, X, _,
+ _, X, _,
+ _, X, _,
+ X, X, _ ),
+
+ // ASCII 0x5E {^}
+ G( _, X, _,
+ X, _, X,
+ _, _, _,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x5F {_}
+ G( _, _, _,
+ _, _, _,
+ _, _, _,
+ _, _, _,
+ X, X, X ),
+
+ // ASCII 0x60 {`}
+ G( _, X, _,
+ _, _, X,
+ _, _, _,
+ _, _, _,
+ _, _, _ ),
+
+ // ASCII 0x61 "a"
G( _, _, _,
X, X, _,
_, X, X,
X, _, X,
_, X, X ),
+ // ASCII 0x62 "b"
G( X, _, _,
X, X, _,
X, _, X,
X, _, X,
X, X, _ ),
+ // ASCII 0x63 "c"
G( _, _, _,
_, X, X,
X, _, _,
X, _, _,
_, X, X ),
+ // ASCII 0x64 "d"
G( _, _, X,
_, X, X,
X, _, X,
X, _, X,
_, X, X ),
+ // ASCII 0x65 "e"
G( _, _, _,
_, X, _,
X, _, X,
X, X, _,
_, X, X ),
+ // ASCII 0x66 "f"
G( _, _, X,
_, X, _,
X, X, X,
_, X, _,
_, X, _ ),
+ // ASCII 0x67 "g"
G( _, _, _,
X, X, X,
X, _, X,
_, X, X,
X, X, X ),
+ // ASCII 0x68 "h"
G( X, _, _,
X, _, _,
X, X, _,
X, _, X,
X, _, X ),
+ // ASCII 0x69 "i"
G( _, X, _,
_, _, _,
_, X, _,
_, X, _,
X, X, X ),
+ // ASCII 0x6A "j"
G( _, X, _,
_, _, _,
_, X, _,
_, X, _,
X, _, _ ),
+ // ASCII 0x6B "k"
G( X, _, _,
X, _, X,
X, X, _,
X, X, _,
X, _, X ),
+ // ASCII 0x6C "l"
G( X, X, _,
_, X, _,
_, X, _,
_, X, _,
_, X, X ),
+ // ASCII 0x6D "m"
G( _, _, _,
X, X, _,
X, X, X,
X, X, X,
X, _, X ),
+ // ASCII 0x6E "n"
G( _, _, _,
X, X, _,
X, _, X,
X, _, X,
X, _, X ),
+ // ASCII 0x6F "o"
G( _, _, _,
X, X, X,
X, _, X,
X, _, X,
X, X, X ),
+ // ASCII 0x70 "p"
G( _, _, _,
X, X, _,
X, _, X,
X, X, _,
X, _, _ ),
+ // ASCII 0x71 "q"
G( _, _, _,
_, X, X,
X, _, X,
_, X, X,
_, _, X ),
+ // ASCII 0x72 "r"
G( _, _, _,
X, _, X,
X, X, _,
X, _, _,
X, _, _ ),
+ // ASCII 0x73 "s"
G( _, _, _,
_, X, X,
X, _, _,
_, X, X,
X, X, _ ),
+ // ASCII 0x74 "t"
G( _, X, _,
X, X, X,
_, X, _,
_, X, _,
_, X, _ ),
+ // ASCII 0x75 "u"
G( _, _, _,
X, _, X,
X, _, X,
X, _, X,
X, X, X ),
+ // ASCII 0x76 "v"
G( _, _, _,
X, _, X,
X, _, X,
_, X, _,
_, X, _ ),
+ // ASCII 0x77 "w"
G( _, _, _,
X, _, X,
X, _, X,
X, X, X,
X, X, X ),
+ // ASCII 0x78 "x"
G( _, _, _,
X, _, X,
_, X, _,
_, X, _,
X, _, X ),
+ // ASCII 0x79 "y"
G( _, _, _,
X, _, X,
X, X, X,
_, _, X,
X, X, _ ),
+ // ASCII 0x7A "z"
G( _, _, _,
X, X, X,
_, X, _,
@@ -399,87 +678,50 @@ static const uint8_t glyphs[][2] = {
X, X, X ),
- G( _, X, _,
- _, X, _,
- _, X, _,
- _, X, _,
- _, X, _ ),
-
- G( _, _, _,
- _, _, _,
- X, X, X,
- _, _, _,
- _, _, _ ),
-
-
- G( _, _, _,
- _, _, X,
- _, X, _,
- X, _, _,
- _, _, _ ),
-
- G( _, _, _,
- _, X, _,
- _, _, _,
- _, X, _,
- _, _, _ ),
-
- G( _, _, _,
- _, _, _,
- _, _, _,
- _, X, _,
- _, _, _ ),
-
- G( _, _, _,
- _, _, _,
- _, _, _,
+ // ASCII 0x7B "{"
+ G( _, X, X,
_, X, _,
- X, _, _ ),
-
- G( _, _, _,
- _, _, _,
- _, _, _,
- _, _, _,
- X, X, X ),
-
- G( X, X, _,
_, _, X,
_, X, _,
- _, _, _,
- _, X, _ ),
+ _, X, X ),
+ // ASCII 0x7C {|}
G( _, X, _,
_, X, _,
_, X, _,
- _, _, _,
+ _, X, _,
_, X, _ ),
- G( X, _, _,
- _, _, X,
+ // ASCII 0x7D "]"
+ G( X, X, _,
_, X, _,
X, _, _,
- _, _, X ),
+ _, X, _,
+ X, X, _ ),
+ // ASCII 0x7E "~"
G( _, _, _,
- _, X, _,
+ _, _, X,
X, X, X,
- _, X, _,
+ X, _, _,
_, _, _ ),
-
- G( _, X, _,
- X, X, X,
- _, X, _,
- X, X, X,
- _, X, _ ),
-
+
+ // Degree symbol
G( _, X, _,
X, _, X,
_, X, _,
_, _, _,
- _, _, _ ),
+ _, _, _ )
};
+#define NEOFONT_SET_CHAR_UNKNOWN(lhs) NEOFONT_SET_CHAR(lhs, \
+ 0, 1, 0, \
+ 1, 1, 1, \
+ 0, 1, 0, \
+ 1, 1, 1, \
+ 0, 1, 0 )
+
#undef X
#undef _
#undef G
@@ -510,48 +752,29 @@ static const uint8_t * neofont0mono_glyph_bitmap_cb(const lv_font_t * font, uint
{
if (unicode_letter < 0x20) return NULL;
- static const uint8_t spc[] = { 0, 0 };
- static uint8_t custom[2];
- /* Your code here */
-
// /* The bitmap should be a continuous bitstream where
// * each pixel is represented by `bpp` bits */
- if ('0' <= unicode_letter && unicode_letter <= '9') {
- return glyphs[(unicode_letter - '0')];
- }
- if ('A' <= unicode_letter && unicode_letter <= 'Z') {
- return glyphs[(unicode_letter - 'A')+10];
- }
- if ('a' <= unicode_letter && unicode_letter <= 'z') {
- return glyphs[(unicode_letter - 'a')+36];
- }
-
- if (unicode_letter == ' ') { return spc; }
- static const char *symbols = "|-/:.,_?!%+#";
- if (unicode_letter < 0x80) {
- char*x = strchr(symbols,((uint8_t)unicode_letter));
- if (x != NULL) {
- return glyphs[62+(x-symbols)];
- }
+ if (' ' <= unicode_letter && unicode_letter <= '~') {
+ return glyphs[(unicode_letter - ' ')];
}
- switch (unicode_letter) {
- case 0xB0:
- return glyphs[sizeof(glyphs)/sizeof(glyphs[0])-1];
- }
+ static uint8_t custom[2];
-#define NEOFONT_LOWERCASE_I (0xF0000 + (1 << 0) + (1 << 6) + (1 << 9) + (1 << 12))
-
- if ((0xF0000 < unicode_letter) && (unicode_letter < 0xF7FFF)) {
+ if (unicode_letter == 0xB0) {
+ // Degree symbol
+ return glyphs[sizeof(glyphs)/sizeof(glyphs[0])-1];
+ } else if ((0xF0000 < unicode_letter) && (unicode_letter < 0xF7FFF)) {
custom[0] = unicode_letter;
custom[1] = (unicode_letter >> 7);
- return custom;
- }
-
- return glyphs[sizeof(glyphs)/sizeof(glyphs[0])-2];
+ } else {
+ NEOFONT_SET_CHAR_UNKNOWN(custom);
+ }
+ return custom;
}
+#define NEOFONT_LOWERCASE_I (0xF0000 + (1 << 0) + (1 << 6) + (1 << 9) + (1 << 12))
+
lv_font_t neofont0mono = {
.get_glyph_dsc = neofont0mono_glyph_dsc_cb, /*Set a callback to get info about gylphs*/
.get_glyph_bitmap = neofont0mono_glyph_bitmap_cb, /*Set a callback to get bitmap of a glyp*/