diff options
-rw-r--r-- | display.c | 15 | ||||
-rw-r--r-- | display.h | 1 | ||||
-rw-r--r-- | vt100.c | 5 |
3 files changed, 21 insertions, 0 deletions
@@ -63,3 +63,18 @@ void runes_display_show_string(RunesTerm *t, char *buf, size_t len) runes_window_backend_flush(t); } } + +void runes_display_backspace(RunesTerm *t) +{ + double x, y; + double fontx, fonty, ascent; + + runes_display_move_to(t, t->row, t->col - 1); + cairo_set_source_rgb(t->cr, 1.0, 1.0, 1.0); + cairo_get_current_point(t->cr, &x, &y); + runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); + cairo_rectangle(t->cr, x, y - ascent, x + fontx, y); + cairo_fill(t->cr); + cairo_set_source_rgb(t->cr, 0.0, 0.0, 1.0); + runes_display_move_to(t, t->row, t->col); +} @@ -6,5 +6,6 @@ void runes_display_get_term_size(RunesTerm *t, int *row, int *col, int *xpixel, void runes_display_get_position(RunesTerm *t, int *row, int *col); void runes_display_move_to(RunesTerm *t, int row, int col); void runes_display_show_string(RunesTerm *t, char *buf, size_t len); +void runes_display_backspace(RunesTerm *t); #endif @@ -16,6 +16,11 @@ static char *runes_vt100_handle_ctrl_char(RunesTerm *t, char *buf, size_t len) UNUSED(len); switch (buf[0]) { + case '\010': { /* BS */ + runes_display_backspace(t); + buf++; + break; + } case '\011': { /* TAB */ int row, col; |