From 493bd84ccaac973c7e86e90bfcccb3e37955cd52 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 8 May 2016 19:43:29 -0400 Subject: fix redrawing the window under the cursor after it moves --- src/display.c | 18 ++++++++++++++++-- src/display.h | 1 + 2 files changed, 17 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; diff --git a/src/display.h b/src/display.h index 4230fc4..427ddb3 100644 --- a/src/display.h +++ b/src/display.h @@ -7,6 +7,7 @@ struct runes_display { cairo_t *cr; + cairo_pattern_t *buffer; PangoLayout *layout; int row_visible_offset; -- cgit v1.2.3-54-g00ecf