aboutsummaryrefslogtreecommitdiffstats
path: root/src/display.c
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-05-08 19:43:29 -0400
committerJesse Luehrs <doy@tozt.net>2016-05-08 19:43:29 -0400
commit493bd84ccaac973c7e86e90bfcccb3e37955cd52 (patch)
tree8fd7e80fa80a769fbb07d94373c6d3c49e5a44fb /src/display.c
parentf0dcd27213628ec04f37623ee72ded56fbbeeee8 (diff)
downloadrunes-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.c18
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;