From 20af289759558f6e8ecf27a3d2ae5b8b37ac61df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 30 Jul 2019 20:18:58 +0200 Subject: [PATCH] render: only explicitly re-render old cursor cell if it isn't dirty If it is dirty, it will be rendered in the normal rendering process. --- render.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/render.c b/render.c index b0d2e656..c474a4f1 100644 --- a/render.c +++ b/render.c @@ -374,20 +374,18 @@ grid_render(struct terminal *term) /* Erase old cursor (if we rendered a cursor last time) */ if (term->render.last_cursor.cell != NULL) { - struct cell *hack = (struct cell *)term->render.last_cursor.cell; - hack->attrs.clean = 0; - render_cell( - term, buf, 0, - //term->render.last_cursor.cell, - hack, - term->render.last_cursor.in_view.col, - term->render.last_cursor.in_view.row, false); + struct cell *cell = term->render.last_cursor.cell; + struct coord at = term->render.last_cursor.in_view; - wl_surface_damage_buffer( - term->wl.surface, - term->render.last_cursor.in_view.col * term->cell_width, - term->render.last_cursor.in_view.row * term->cell_height, - term->cell_width, term->cell_height); + if (cell->attrs.clean) { + cell->attrs.clean = 0; + render_cell(term, buf, 0, cell, at.col, at.row, false); + + wl_surface_damage_buffer( + term->wl.surface, + at.col * term->cell_width, at.row * term->cell_height, + term->cell_width, term->cell_height); + } term->render.last_cursor.cell = NULL; if (term->render.last_cursor.actual.col != term->cursor.col ||