diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-05-08 19:43:29 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-05-08 19:43:29 -0400 |
commit | 493bd84ccaac973c7e86e90bfcccb3e37955cd52 (patch) | |
tree | 8fd7e80fa80a769fbb07d94373c6d3c49e5a44fb /src/display.c | |
parent | f0dcd27213628ec04f37623ee72ded56fbbeeee8 (diff) | |
download | runes-493bd84ccaac973c7e86e90bfcccb3e37955cd52.tar.gz runes-493bd84ccaac973c7e86e90bfcccb3e37955cd52.zip |
fix redrawing the window under the cursor after it moves
Diffstat (limited to 'src/display.c')
-rw-r--r-- | src/display.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/display.c b/src/display.c index 83ee9d9..4e6b510 100644 --- a/src/display.c +++ b/src/display.c @@ -9,6 +9,7 @@ static void runes_display_recalculate_font_metrics( RunesDisplay *display, char *font_name); +static void runes_display_repaint_screen(RunesTerm *t); static int runes_display_draw_cell(RunesTerm *t, int row, int col); static void runes_display_paint_rectangle( RunesTerm *t, cairo_t *cr, cairo_pattern_t *pattern, @@ -52,6 +53,7 @@ void runes_display_draw_screen(RunesTerm *t) int r, rows; if (!t->scr->dirty && !display->dirty) { + runes_display_repaint_screen(t); return; } @@ -71,8 +73,9 @@ void runes_display_draw_screen(RunesTerm *t) } } - cairo_pop_group_to_source(display->cr); - cairo_paint(display->cr); + cairo_pattern_destroy(display->buffer); + display->buffer = cairo_pop_group(display->cr); + runes_display_repaint_screen(t); t->scr->dirty = 0; display->dirty = 0; @@ -186,6 +189,7 @@ int runes_display_loc_is_between( void runes_display_cleanup(RunesDisplay *display) { + cairo_pattern_destroy(display->buffer); g_object_unref(display->layout); } @@ -223,6 +227,16 @@ static void runes_display_recalculate_font_metrics( } } +static void runes_display_repaint_screen(RunesTerm *t) +{ + RunesDisplay *display = t->display; + + if (display->buffer) { + cairo_set_source(display->cr, display->buffer); + cairo_paint(display->cr); + } +} + static int runes_display_draw_cell(RunesTerm *t, int row, int col) { RunesDisplay *display = t->display; |