summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2014-10-02 19:47:21 +0200
committerDavid Herrmann <dh.herrmann@gmail.com>2014-10-03 15:57:00 +0200
commit61d0326a5b1c11a8f2e8e31ec9093e81daa26588 (patch)
tree0a875cbd7d0b7c18f7b90c9aa804b2f7d375a727 /src
parentcb51a41fa632790ea839aa126844dfc2d74eb341 (diff)
terminal/unifont: add built-in fallback glyph
In case we cannot render a glyph, we want a fallback we can display instead. If we rely on the font itself to provide the fallback character, we have nothing to display if that character is not available. Therefore, add a static fallback that we can use at any time.
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd-terminal/unifont.c18
-rw-r--r--src/libsystemd-terminal/unifont.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/src/libsystemd-terminal/unifont.c b/src/libsystemd-terminal/unifont.c
index 7520015988..2acfa9821a 100644
--- a/src/libsystemd-terminal/unifont.c
+++ b/src/libsystemd-terminal/unifont.c
@@ -221,3 +221,21 @@ int unifont_lookup(unifont *u, unifont_glyph *out, uint32_t ucs4) {
memcpy(out, &g, sizeof(g));
return 0;
}
+
+void unifont_fallback(unifont_glyph *out) {
+ static const uint8_t fallback_data[] = {
+ /* unifont 0xfffd '�' (unicode replacement character) */
+ 0x00, 0x00, 0x00, 0x7e,
+ 0x66, 0x5a, 0x5a, 0x7a,
+ 0x76, 0x76, 0x7e, 0x76,
+ 0x76, 0x7e, 0x00, 0x00,
+ };
+
+ assert(out);
+
+ out->width = 8;
+ out->height = 16;
+ out->stride = 1;
+ out->cwidth = 1;
+ out->data = fallback_data;
+}
diff --git a/src/libsystemd-terminal/unifont.h b/src/libsystemd-terminal/unifont.h
index 0ded61472f..30527cb3fa 100644
--- a/src/libsystemd-terminal/unifont.h
+++ b/src/libsystemd-terminal/unifont.h
@@ -54,3 +54,4 @@ unsigned int unifont_get_width(unifont *u);
unsigned int unifont_get_height(unifont *u);
unsigned int unifont_get_stride(unifont *u);
int unifont_lookup(unifont *u, unifont_glyph *out, uint32_t ucs4);
+void unifont_fallback(unifont_glyph *out);