summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/grid.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2016-07-15 00:42:56 +0000
committernicm <nicm@openbsd.org>2016-07-15 00:42:56 +0000
commit92c661c58a8104b40f0f5a264118afa8ed14a97a (patch)
treefba1f353ba5c641f8b729defd1a30d25d874a4e9 /usr.bin/tmux/grid.c
parentAdd a ProxyJump ssh_config(5) option and corresponding -J ssh(1) (diff)
downloadwireguard-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.c53
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;