summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2017-02-13 16:05:30 +0000
committernicm <nicm@openbsd.org>2017-02-13 16:05:30 +0000
commitd23e027a7803bd02f0e2021752c325850fceae32 (patch)
treee01a295121bd295deca433a4a9fa2c7cee8230c1
parentReverse output when installing a patch; it's more logical (first get, then (diff)
downloadwireguard-openbsd-d23e027a7803bd02f0e2021752c325850fceae32.tar.xz
wireguard-openbsd-d23e027a7803bd02f0e2021752c325850fceae32.zip
Collected cells may still need to be extended for RGB colours.
-rw-r--r--usr.bin/tmux/grid.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/usr.bin/tmux/grid.c b/usr.bin/tmux/grid.c
index 11512dab0ba..51af4ff801c 100644
--- a/usr.bin/tmux/grid.c
+++ b/usr.bin/tmux/grid.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: grid.c,v 1.64 2017/02/08 16:45:18 nicm Exp $ */
+/* $OpenBSD: grid.c,v 1.65 2017/02/13 16:05:30 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -78,6 +78,20 @@ grid_store_cell(struct grid_cell_entry *gce, const struct grid_cell *gc,
gce->data.data = c;
}
+/* Check if a cell should be extended. */
+static int
+grid_need_extended_cell(const struct grid_cell_entry *gce,
+ const struct grid_cell *gc)
+{
+ if (gce->flags & GRID_FLAG_EXTENDED)
+ return (1);
+ if (gc->data.size != 1 || gc->data.width != 1)
+ return (1);
+ if ((gc->fg & COLOUR_FLAG_RGB) ||(gc->bg & COLOUR_FLAG_RGB))
+ return (1);
+ return (0);
+}
+
/* Set cell as extended. */
static struct grid_cell *
grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce,
@@ -382,7 +396,6 @@ grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc)
{
struct grid_line *gl;
struct grid_cell_entry *gce;
- int extended;
if (grid_check_y(gd, py) != 0)
return;
@@ -394,14 +407,7 @@ grid_set_cell(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc)
gl->cellused = px + 1;
gce = &gl->celldata[px];
- extended = (gce->flags & GRID_FLAG_EXTENDED);
- if (!extended && (gc->data.size != 1 || gc->data.width != 1))
- extended = 1;
- if (!extended && (gc->fg & COLOUR_FLAG_RGB))
- extended = 1;
- if (!extended && (gc->bg & COLOUR_FLAG_RGB))
- extended = 1;
- if (extended)
+ if (grid_need_extended_cell(gce, gc))
grid_extended_cell(gl, gce, gc);
else
grid_store_cell(gce, gc, gc->data.data[0]);
@@ -428,9 +434,8 @@ grid_set_cells(struct grid *gd, u_int px, u_int py, const struct grid_cell *gc,
for (i = 0; i < slen; i++) {
gce = &gl->celldata[px + i];
- if (gce->flags & GRID_FLAG_EXTENDED) {
- gcp = &gl->extddata[gce->offset];
- memcpy(gcp, gc, sizeof *gcp);
+ if (grid_need_extended_cell(gce, gc)) {
+ gcp = grid_extended_cell(gl, gce, gc);
utf8_set(&gcp->data, s[i]);
} else
grid_store_cell(gce, gc, s[i]);