diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-11 19:09:08 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-11 19:09:08 -0400 |
commit | 753f0ff60fb305f0087cb3e24bc24d4bbbfb4632 (patch) | |
tree | 98a65066eaf7a5edb066d63488b4afc7d952d565 | |
parent | 67ed90e8683aab22876d13e864cf68bbb6196989 (diff) | |
download | runes-753f0ff60fb305f0087cb3e24bc24d4bbbfb4632.tar.gz runes-753f0ff60fb305f0087cb3e24bc24d4bbbfb4632.zip |
handle show/hide cursor
-rw-r--r-- | display.c | 38 | ||||
-rw-r--r-- | display.h | 2 | ||||
-rw-r--r-- | term.h | 2 | ||||
-rw-r--r-- | vt100.c | 30 |
4 files changed, 60 insertions, 12 deletions
@@ -17,6 +17,9 @@ void runes_display_init(RunesTerm *t) t->colors[6] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); t->colors[7] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); + t->cursorcolor = cairo_pattern_create_rgb(0.0, 1.0, 0.0); + t->show_cursor = 1; + t->font_name = "monospace"; t->font_size = 14.0; t->font_bold = 0; @@ -26,7 +29,6 @@ void runes_display_init(RunesTerm *t) cairo_set_scaled_font(t->cr, runes_display_make_font(t)); runes_display_reset_text_attributes(t); - t->cursorcolor = cairo_pattern_create_rgb(0.0, 1.0, 0.0); cairo_save(t->cr); cairo_set_source(t->cr, t->bgcolor); @@ -58,17 +60,19 @@ void runes_display_get_position(RunesTerm *t, int *row, int *col) * time, and shouldn't be left behind when it moves */ void runes_display_draw_cursor(RunesTerm *t) { - double x, y; - double fontx, fonty, ascent; - - cairo_save(t->backend_cr); - cairo_set_source(t->backend_cr, t->cursorcolor); - runes_display_move_to(t, t->row, t->col); - cairo_get_current_point(t->cr, &x, &y); - runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); - cairo_rectangle(t->backend_cr, x, y - ascent, fontx, fonty); - cairo_fill(t->backend_cr); - cairo_restore(t->backend_cr); + if (t->show_cursor) { + double x, y; + double fontx, fonty, ascent; + + cairo_save(t->backend_cr); + cairo_set_source(t->backend_cr, t->cursorcolor); + runes_display_move_to(t, t->row, t->col); + cairo_get_current_point(t->cr, &x, &y); + runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); + cairo_rectangle(t->backend_cr, x, y - ascent, fontx, fonty); + cairo_fill(t->backend_cr); + cairo_restore(t->backend_cr); + } } void runes_display_move_to(RunesTerm *t, int row, int col) @@ -251,6 +255,16 @@ void runes_display_reset_bg_color(RunesTerm *t) runes_display_set_bg_color(t, t->colors[0]); } +void runes_display_show_cursor(RunesTerm *t) +{ + t->show_cursor = 1; +} + +void runes_display_hide_cursor(RunesTerm *t) +{ + t->show_cursor = 0; +} + static void runes_display_get_font_dimensions( RunesTerm *t, double *fontx, double *fonty, double *ascent) { @@ -23,5 +23,7 @@ void runes_display_set_fg_color(RunesTerm *t, cairo_pattern_t *color); void runes_display_reset_fg_color(RunesTerm *t); void runes_display_set_bg_color(RunesTerm *t, cairo_pattern_t *color); void runes_display_reset_bg_color(RunesTerm *t); +void runes_display_show_cursor(RunesTerm *t); +void runes_display_hide_cursor(RunesTerm *t); #endif @@ -19,6 +19,8 @@ struct runes_term { char font_bold; char font_underline; + char show_cursor; + cairo_pattern_t *colors[8]; int row; @@ -227,6 +227,36 @@ static char *runes_vt100_handle_csi(RunesTerm *t, char *buf, size_t len) break; } break; + case 'h': + if (dec) { + switch (p[0]) { + case 25: + runes_display_show_cursor(t); + break; + default: + runes_vt100_unhandled_csi(t, dec, p, type); + break; + } + } + else { + runes_vt100_unhandled_csi(t, dec, p, type); + } + break; + case 'l': + if (dec) { + switch (p[0]) { + case 25: + runes_display_hide_cursor(t); + break; + default: + runes_vt100_unhandled_csi(t, dec, p, type); + break; + } + } + else { + runes_vt100_unhandled_csi(t, dec, p, type); + } + break; case 'm': { /* SGR */ int i; |