version 1.3, 2009/07/14 07:23:36 |
version 1.4, 2009/07/14 19:03:16 |
|
|
return (0); |
return (0); |
} |
} |
|
|
/* Redraw entire screen.. */ |
/* Redraw entire screen. */ |
void |
void |
screen_redraw_screen(struct client *c) |
screen_redraw_screen(struct client *c, int status_only) |
{ |
{ |
struct window *w = c->session->curw->window; |
struct window *w = c->session->curw->window; |
struct tty *tty = &c->tty; |
struct tty *tty = &c->tty; |
|
|
u_char choriz, cvert, cbackg; |
u_char choriz, cvert, cbackg; |
|
|
/* Get status line, er, status. */ |
/* Get status line, er, status. */ |
status = options_get_number(&c->session->options, "status"); |
if (c->message_string != NULL || c->prompt_string != NULL) |
|
status = 1; |
|
else |
|
status = options_get_number(&c->session->options, "status"); |
|
|
|
/* If only drawing status and it is present, don't need the rest. */ |
|
if (status_only && status) { |
|
tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1); |
|
return; |
|
} |
|
|
/* Work out ACS characters. */ |
/* Work out ACS characters. */ |
if (tty_term_has(tty->term, TTYC_ACSC)) { |
if (tty_term_has(tty->term, TTYC_ACSC)) { |
has_acs = 1; |
has_acs = 1; |
|
|
if (has_acs) |
if (has_acs) |
tty_putcode(tty, TTYC_SMACS); |
tty_putcode(tty, TTYC_SMACS); |
for (j = 0; j < tty->sy - status; j++) { |
for (j = 0; j < tty->sy - status; j++) { |
|
if (status_only && j != tty->sy - 1) |
|
continue; |
for (i = 0; i < tty->sx; i++) { |
for (i = 0; i < tty->sx; i++) { |
if (!screen_redraw_check_cell(c, i, j)) { |
if (!screen_redraw_check_cell(c, i, j)) { |
tty_cursor(tty, i, j, 0, 0); |
tty_cursor(tty, i, j, 0, 0); |
|
|
tty_putcode(tty, TTYC_SMACS); |
tty_putcode(tty, TTYC_SMACS); |
if (wp->xoff > 0) { |
if (wp->xoff > 0) { |
for (i = wp->yoff; i < wp->yoff + sy; i++) { |
for (i = wp->yoff; i < wp->yoff + sy; i++) { |
|
if (status_only && i != tty->sy - 1) |
|
continue; |
tty_cursor(tty, wp->xoff - 1, i, 0, 0); |
tty_cursor(tty, wp->xoff - 1, i, 0, 0); |
tty_putc(tty, cvert); |
tty_putc(tty, cvert); |
} |
} |
} |
} |
if (wp->xoff + sx < tty->sx) { |
if (wp->xoff + sx < tty->sx) { |
for (i = wp->yoff; i < wp->yoff + sy; i++) { |
for (i = wp->yoff; i < wp->yoff + sy; i++) { |
|
if (status_only && i != tty->sy - 1) |
|
continue; |
tty_cursor(tty, wp->xoff + sx, i, 0, 0); |
tty_cursor(tty, wp->xoff + sx, i, 0, 0); |
tty_putc(&c->tty, cvert); |
tty_putc(&c->tty, cvert); |
} |
} |
|
|
|
|
/* Draw top and bottom borders. */ |
/* Draw top and bottom borders. */ |
if (wp->yoff > 0) { |
if (wp->yoff > 0) { |
tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); |
if (!status_only || wp->yoff - 1 == tty->sy - 1) { |
for (i = 0; i < sx; i++) |
tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); |
tty_putc(tty, choriz); |
for (i = 0; i < sx; i++) |
|
tty_putc(tty, choriz); |
|
} |
} |
} |
if (wp->yoff + sy < tty->sy - status) { |
if (wp->yoff + sy < tty->sy - status) { |
tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); |
if (!status_only || wp->yoff + sy == tty->sy - 1) { |
for (i = 0; i < sx; i++) |
tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); |
tty_putc(tty, choriz); |
for (i = 0; i < sx; i++) |
|
tty_putc(tty, choriz); |
|
} |
} |
} |
if (has_acs) |
if (has_acs) |
tty_putcode(tty, TTYC_RMACS); |
tty_putcode(tty, TTYC_RMACS); |
|
|
/* Draw the pane. */ |
/* Draw the pane. */ |
screen_redraw_pane(c, wp); |
for (i = 0; i < wp->sy; i++) { |
|
if (status_only && i != tty->sy - 1) |
|
continue; |
|
tty_draw_line(tty, wp->screen, i, wp->xoff, wp->yoff); |
|
} |
} |
} |
|
|
/* Draw the status line. */ |
/* Draw the status line. */ |
screen_redraw_status(c); |
if (status) |
|
tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1); |
} |
} |
|
|
/* Draw a single pane. */ |
/* Draw a single pane. */ |
|
|
|
|
for (i = 0; i < wp->sy; i++) |
for (i = 0; i < wp->sy; i++) |
tty_draw_line(&c->tty, wp->screen, i, wp->xoff, wp->yoff); |
tty_draw_line(&c->tty, wp->screen, i, wp->xoff, wp->yoff); |
} |
|
|
|
|
|
/* Draw the status line. */ |
|
void |
|
screen_redraw_status(struct client *c) |
|
{ |
|
tty_draw_line(&c->tty, &c->status, 0, 0, c->tty.sy - 1); |
|
} |
} |