diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2022-09-05 22:34:20 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2022-09-05 23:22:09 +0200 |
commit | 25ad5ae0ec8afe0a8f60d7602ca2357f561246d6 (patch) | |
tree | a1d062c6ffb4c02fcbeb47e8a55bf8c19e536be5 /xC.c | |
parent | 10f6072da954f8eb59192e287b7eeb7a9efd1134 (diff) | |
download | xK-25ad5ae0ec8afe0a8f60d7602ca2357f561246d6.tar.gz xK-25ad5ae0ec8afe0a8f60d7602ca2357f561246d6.tar.xz xK-25ad5ae0ec8afe0a8f60d7602ca2357f561246d6.zip |
xC/xP: fix colour values, and render them with CSS
Diffstat (limited to 'xC.c')
-rw-r--r-- | xC.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -1480,7 +1480,7 @@ struct formatter_item { enum formatter_item_type type : 16; ///< Type of this item int attribute : 16; ///< Attribute ID or a TEXT_* mask - int color; ///< Colour + int color; ///< Colour ([256 << 16] | 16) char *text; ///< String }; @@ -3114,6 +3114,9 @@ relay_prepare_buffer_line (struct app_context *ctx, struct buffer *buffer, union relay_item_data *p = e->items = xcalloc (len * 6, sizeof *e->items); for (struct formatter_item *i = line->items; len--; i++) { + // XXX: See attr_printer_decode_color(), this is a footgun. + int16_t c16 = i->color; + int16_t c256 = i->color >> 16; switch (i->type) { case FORMATTER_ITEM_TEXT: @@ -3125,11 +3128,11 @@ relay_prepare_buffer_line (struct app_context *ctx, struct buffer *buffer, (p++)->kind = RELAY_ITEM_RESET; break; case FORMATTER_ITEM_FG_COLOR: - p->fg_color.color = i->color; + p->fg_color.color = c256 <= 0 ? c16 : c256; (p++)->kind = RELAY_ITEM_FG_COLOR; break; case FORMATTER_ITEM_BG_COLOR: - p->bg_color.color = i->color; + p->bg_color.color = c256 <= 0 ? c16 : c256; (p++)->kind = RELAY_ITEM_BG_COLOR; break; case FORMATTER_ITEM_SIMPLE: |