diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-10-28 08:52:36 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-10-28 08:52:36 +0000 |
commit | 1eaefbf1698fc66815e538fc3040f4446f444f7b (patch) | |
tree | 1c5d4af0638a07200c38a893f4efba995ea1364a /tty.c | |
parent | 5730cbf3e3627d40177f9377b068f2ba50144ed9 (diff) | |
download | rtmux-1eaefbf1698fc66815e538fc3040f4446f444f7b.tar.gz rtmux-1eaefbf1698fc66815e538fc3040f4446f444f7b.tar.bz2 rtmux-1eaefbf1698fc66815e538fc3040f4446f444f7b.zip |
Add a minor optimisatin: if the character being printed is space, don't worry
about setting the background colour or attributes (except reverse).
Diffstat (limited to 'tty.c')
-rw-r--r-- | tty.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -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 |