diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-10-28 08:52:37 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-10-28 08:52:37 +0000 |
commit | e5d284e3de4bfeb7abcec05fe5c160d7fd0841cc (patch) | |
tree | 8304c32460df32c04f3c4b1383cf43b8d8fe7e29 | |
parent | 4f3d2f08f6728ac59166385caff2d8ea45774a37 (diff) |
Add a minor optimisatin: if the character being printed is space, don't worry
about setting the background colour or attributes (except reverse).
-rw-r--r-- | usr.bin/tmux/screen-redraw.c | 4 | ||||
-rw-r--r-- | usr.bin/tmux/tty.c | 20 |
2 files changed, 20 insertions, 4 deletions
diff --git a/usr.bin/tmux/screen-redraw.c b/usr.bin/tmux/screen-redraw.c index 3514964cfb9..eb1cbbf1196 100644 --- a/usr.bin/tmux/screen-redraw.c +++ b/usr.bin/tmux/screen-redraw.c @@ -1,4 +1,4 @@ -/* $OpenBSD: screen-redraw.c,v 1.12 2009/10/12 09:29:58 nicm Exp $ */ +/* $OpenBSD: screen-redraw.c,v 1.13 2009/10/28 08:52:36 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -257,6 +257,7 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp) if (wp->sx < len * 6 || wp->sy < 5) { tty_cursor(tty, xoff + px - len / 2, yoff + py); memcpy(&gc, &grid_default_cell, sizeof gc); + gc.data = '_'; /* not space */ colour_set_fg(&gc, colour); tty_attributes(tty, &gc); tty_puts(tty, buf); @@ -267,6 +268,7 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp) py -= 2; memcpy(&gc, &grid_default_cell, sizeof gc); + gc.data = '_'; /* not space */ colour_set_bg(&gc, colour); tty_attributes(tty, &gc); for (ptr = buf; *ptr != '\0'; ptr++) { diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c index adb27046c77..64084468f39 100644 --- a/usr.bin/tmux/tty.c +++ b/usr.bin/tmux/tty.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty.c,v 1.62 2009/10/28 08:33:20 nicm Exp $ */ +/* $OpenBSD: tty.c,v 1.63 2009/10/28 08:52:36 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1119,10 +1119,24 @@ out: void tty_attributes(struct tty *tty, const struct grid_cell *gc) { - struct grid_cell *tc = &tty->cell; + struct grid_cell *tc = &tty->cell, gc2; u_char changed; u_int fg = gc->fg, bg = gc->bg, attr = gc->attr; + /* If the character is space, don't care about foreground. */ + if (gc->data == ' ' && !(gc->flags & GRID_FLAG_UTF8)) { + memcpy(&gc2, gc, sizeof gc2); + + if (gc->attr & GRID_ATTR_REVERSE) + gc2.bg = tc->bg; + else + gc2.fg = tc->fg; + gc2.attr = tc->attr & ~GRID_ATTR_REVERSE; + gc2.attr |= gc->attr & GRID_ATTR_REVERSE; + + gc = &gc2; + } + /* If any bits are being cleared, reset everything. */ if (tc->attr & ~attr) tty_reset(tty); @@ -1185,7 +1199,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc, int *attr) /* No changes? Nothing is necessary. */ if (fg == tc->fg && bg == tc->bg && ((flags ^ tc->flags) & (GRID_FLAG_FG256|GRID_FLAG_BG256)) == 0) - return; + return; /* * Is either the default colour? This is handled specially because the |