diff options
author | 2016-07-15 00:42:56 +0000 | |
---|---|---|
committer | 2016-07-15 00:42:56 +0000 | |
commit | 92c661c58a8104b40f0f5a264118afa8ed14a97a (patch) | |
tree | fba1f353ba5c641f8b729defd1a30d25d874a4e9 /usr.bin/tmux/grid.c | |
parent | Add a ProxyJump ssh_config(5) option and corresponding -J ssh(1) (diff) | |
download | wireguard-openbsd-92c661c58a8104b40f0f5a264118afa8ed14a97a.tar.xz wireguard-openbsd-92c661c58a8104b40f0f5a264118afa8ed14a97a.zip |
Instead of representing colours in several different forms with various
cell flags, convert to use an int with flags marking 256 or RGB colours
in the top byte (except in cells, which we don't want to make any
bigger). From Brad Town.
Diffstat (limited to 'usr.bin/tmux/grid.c')
-rw-r--r-- | usr.bin/tmux/grid.c | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/usr.bin/tmux/grid.c b/usr.bin/tmux/grid.c index 7011a47f8b6..dd2e50b35d4 100644 --- a/usr.bin/tmux/grid.c +++ b/usr.bin/tmux/grid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: grid.c,v 1.52 2016/01/31 09:57:09 nicm Exp $ */ +/* $OpenBSD: grid.c,v 1.53 2016/07/15 00:42:56 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -37,7 +37,7 @@ /* Default grid cell data. */ const struct grid_cell grid_default_cell = { - 0, 0, { .fg = 8 }, { .bg = 8 }, { { ' ' }, 0, 1, 1 } + 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } }; const struct grid_cell_entry grid_default_entry = { 0, { .data = { 0, 8, 8, ' ' } } @@ -270,10 +270,14 @@ grid_get_cell(struct grid *gd, u_int px, u_int py, struct grid_cell *gc) return; } - gc->flags = gce->flags & ~GRID_FLAG_EXTENDED; + gc->flags = gce->flags & ~(GRID_FLAG_FG256|GRID_FLAG_BG256); gc->attr = gce->data.attr; gc->fg = gce->data.fg; + if (gce->flags & GRID_FLAG_FG256) + gc->fg |= COLOUR_FLAG_256; gc->bg = gce->data.bg; + if (gce->flags & GRID_FLAG_BG256) + gc->bg |= COLOUR_FLAG_256; utf8_set(&gc->data, gce->data.data); } @@ -297,7 +301,8 @@ grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc) extended = (gce->flags & GRID_FLAG_EXTENDED); if (!extended && (gc->data.size != 1 || gc->data.width != 1)) extended = 1; - if (!extended && (gc->flags & (GRID_FLAG_FGRGB|GRID_FLAG_BGRGB))) + if (!extended && ((gc->fg & COLOUR_FLAG_RGB) || + (gc->bg & COLOUR_FLAG_RGB))) extended = 1; if (extended) { if (~gce->flags & GRID_FLAG_EXTENDED) { @@ -314,10 +319,14 @@ grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc) return; } - gce->flags = gc->flags & ~GRID_FLAG_EXTENDED; + gce->flags = gc->flags; gce->data.attr = gc->attr; - gce->data.fg = gc->fg; - gce->data.bg = gc->bg; + gce->data.fg = gc->fg & 0xff; + if (gc->fg & COLOUR_FLAG_256) + gce->flags |= GRID_FLAG_FG256; + gce->data.bg = gc->bg & 0xff; + if (gc->bg & COLOUR_FLAG_256) + gce->flags |= GRID_FLAG_BG256; gce->data.data = gc->data.data[0]; } @@ -446,18 +455,20 @@ size_t grid_string_cells_fg(const struct grid_cell *gc, int *values) { size_t n; + u_char r, g, b; n = 0; - if (gc->flags & GRID_FLAG_FG256) { + if (gc->fg & COLOUR_FLAG_256) { values[n++] = 38; values[n++] = 5; - values[n++] = gc->fg; - } else if (gc->flags & GRID_FLAG_FGRGB) { + values[n++] = gc->fg & 0xff; + } else if (gc->fg & COLOUR_FLAG_RGB) { values[n++] = 38; values[n++] = 2; - values[n++] = gc->fg_rgb.r; - values[n++] = gc->fg_rgb.g; - values[n++] = gc->fg_rgb.b; + colour_split_rgb(gc->fg, &r, &g, &b); + values[n++] = r; + values[n++] = g; + values[n++] = b; } else { switch (gc->fg) { case 0: @@ -493,18 +504,20 @@ size_t grid_string_cells_bg(const struct grid_cell *gc, int *values) { size_t n; + u_char r, g, b; n = 0; - if (gc->flags & GRID_FLAG_BG256) { + if (gc->bg & COLOUR_FLAG_256) { values[n++] = 48; values[n++] = 5; - values[n++] = gc->bg; - } else if (gc->flags & GRID_FLAG_BGRGB) { + values[n++] = gc->bg & 0xff; + } else if (gc->bg & COLOUR_FLAG_RGB) { values[n++] = 48; values[n++] = 2; - values[n++] = gc->bg_rgb.r; - values[n++] = gc->bg_rgb.g; - values[n++] = gc->bg_rgb.b; + colour_split_rgb(gc->bg, &r, &g, &b); + values[n++] = r; + values[n++] = g; + values[n++] = b; } else { switch (gc->bg) { case 0: @@ -525,7 +538,7 @@ grid_string_cells_bg(const struct grid_cell *gc, int *values) case 102: case 103: case 104: - case 105: + case 105: case 106: case 107: values[n++] = gc->bg - 10; |