From 61d0326a5b1c11a8f2e8e31ec9093e81daa26588 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Thu, 2 Oct 2014 19:47:21 +0200 Subject: [PATCH] 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. --- src/libsystemd-terminal/unifont.c | 18 ++++++++++++++++++ src/libsystemd-terminal/unifont.h | 1 + 2 files changed, 19 insertions(+) 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);