csi: implement reverse video

This commit is contained in:
Daniel Eklöf 2019-07-05 20:12:40 +02:00
parent c76e620d71
commit b26e03fced
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 18 additions and 8 deletions

6
csi.c
View file

@ -577,7 +577,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
break;
case 5:
LOG_WARN("unimplemented: flash");
term->reverse = true;
term_damage_all(term);
break;
case 7:
@ -655,7 +656,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
break;
case 5:
LOG_WARN("unimplemented: flash");
term->reverse = false;
term_damage_all(term);
break;
case 7:

View file

@ -92,6 +92,12 @@ grid_render_update(struct terminal *term, struct buffer *buf, const struct damag
struct rgba background = cell->attrs.have_background
? cell->attrs.background : term->background;
if (term->reverse) {
struct rgba swap = foreground;
foreground = background;
background = swap;
}
if (has_cursor) {
struct rgba swap = foreground;
foreground = background;
@ -186,9 +192,10 @@ grid_render_erase(struct terminal *term, struct buffer *buf, const struct damage
assert(dmg->range.start >= term->grid->offset);
cairo_set_source_rgba(
buf->cairo, term->background.r, term->background.g,
term->background.b, term->background.a);
const struct rgba *bg = !term->reverse ?
&term->background : &term->foreground;
cairo_set_source_rgba(buf->cairo, bg->r, bg->g, bg->b, bg->a);
const int cols = term->cols;
@ -375,9 +382,9 @@ grid_render(struct terminal *term)
int rmargin_width = term->width - rmargin;
int bmargin_height = term->height - bmargin;
cairo_set_source_rgba(
buf->cairo, term->background.r, term->background.g,
term->background.b, term->background.a);
const struct rgba *bg = !term->reverse ?
&term->background : &term->foreground;
cairo_set_source_rgba(buf->cairo, bg->r, bg->g, bg->b, bg->a);
cairo_rectangle(buf->cairo, rmargin, 0, rmargin_width, term->height);
cairo_rectangle(buf->cairo, 0, bmargin, term->width, bmargin_height);

View file

@ -184,6 +184,7 @@ struct terminal {
enum decckm decckm;
enum keypad_mode keypad_mode;
bool reverse;
bool hide_cursor;
bool auto_margin;
bool insert_mode;