term: track cell color source

Each cell now tracks it’s current color source:

* default fg/bg
* base16 fg/bg (maps to *both* the regular and bright colors)
* base256 fg/bg
* RGB

Note that we don’t have enough bits to separate the regular from the
bright colors. These _shouldn’t_ be the same, so we ought to be
fine...
This commit is contained in:
Daniel Eklöf 2021-11-20 16:29:57 +01:00
parent 37b82efa77
commit d46af6bd7a
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
6 changed files with 34 additions and 26 deletions

View file

@ -1770,11 +1770,13 @@ erase_cell_range(struct terminal *term, struct row *row, int start, int end)
row->dirty = true;
if (unlikely(term->vt.attrs.have_bg)) {
const enum color_source bg_src = term->vt.attrs.bg_src;
if (unlikely(bg_src != COLOR_DEFAULT)) {
for (int col = start; col <= end; col++) {
struct cell *c = &row->cells[col];
c->wc = 0;
c->attrs = (struct attributes){.have_bg = 1, .bg = term->vt.attrs.bg};
c->attrs = (struct attributes){.bg_src = bg_src, .bg = term->vt.attrs.bg};
}
} else
memset(&row->cells[start], 0, (end - start + 1) * sizeof(row->cells[0]));