Sync OpenBSD patchset 471:

Add a minor optimisatin: if the character being printed is space, don't worry
about setting the background colour or attributes (except reverse).
This commit is contained in:
Tiago Cunha 2009-10-28 23:17:28 +00:00
parent c529c02ac0
commit d13d3a9902
2 changed files with 20 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $Id: screen-redraw.c,v 1.48 2009-10-15 01:30:00 tcunha Exp $ */
/* $Id: screen-redraw.c,v 1.49 2009-10-28 23:17:28 tcunha 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++) {

20
tty.c
View File

@ -1,4 +1,4 @@
/* $Id: tty.c,v 1.166 2009-10-28 23:16:30 tcunha Exp $ */
/* $Id: tty.c,v 1.167 2009-10-28 23:17:28 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -1124,10 +1124,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);
@ -1190,7 +1204,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