mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
render: sixels: update damage region when rendering sixels
This fixes flickering when foot is forced to double-buffer (e.g when running under KDE, or smithay based compositors). Since the damage region isn't updated, the sixel images aren't included in the memcpy that is done to transfer the last frame's updated regions to the next frame. As a result, every other frame will have the sixels, while the others don't. Closes #1851
This commit is contained in:
parent
4afb94687c
commit
ce38f5b413
2 changed files with 10 additions and 2 deletions
|
|
@ -103,9 +103,13 @@
|
|||
* Occasional visual glitches when selecting text, when foot is running
|
||||
under a compositor that forces foot to double buffer
|
||||
(e.g. KDE/KWin) ([#1715][1715]).
|
||||
* Sixels flickering when foot is running under a compositor that
|
||||
forces foot to double buffer (e.g. KDE, or Smithay based
|
||||
compositors) ([#1851][1851]).
|
||||
|
||||
[1828]: https://codeberg.org/dnkl/foot/issues/1828
|
||||
[1715]: https://codeberg.org/dnkl/foot/issues/1715
|
||||
[1851]: https://codeberg.org/dnkl/foot/issues/1851
|
||||
|
||||
|
||||
### Security
|
||||
|
|
|
|||
8
render.c
8
render.c
|
|
@ -1390,7 +1390,8 @@ grid_render_scroll_reverse(struct terminal *term, struct buffer *buf,
|
|||
}
|
||||
|
||||
static void
|
||||
render_sixel_chunk(struct terminal *term, pixman_image_t *pix, const struct sixel *sixel,
|
||||
render_sixel_chunk(struct terminal *term, pixman_image_t *pix,
|
||||
pixman_region32_t *damage, const struct sixel *sixel,
|
||||
int term_start_row, int img_start_row, int count)
|
||||
{
|
||||
/* Translate row/column to x/y pixel values */
|
||||
|
|
@ -1427,6 +1428,9 @@ render_sixel_chunk(struct terminal *term, pixman_image_t *pix, const struct sixe
|
|||
x, y,
|
||||
width, height);
|
||||
|
||||
if (damage != NULL)
|
||||
pixman_region32_union_rect(damage, damage, x, y, width, height);
|
||||
|
||||
wl_surface_damage_buffer(term->window->surface.surf, x, y, width, height);
|
||||
}
|
||||
|
||||
|
|
@ -1450,7 +1454,7 @@ render_sixel(struct terminal *term, pixman_image_t *pix,
|
|||
#define maybe_emit_sixel_chunk_then_reset() \
|
||||
if (chunk_row_count != 0) { \
|
||||
render_sixel_chunk( \
|
||||
term, pix, sixel, \
|
||||
term, pix, damage, sixel, \
|
||||
chunk_term_start, chunk_img_start, chunk_row_count); \
|
||||
chunk_term_start = chunk_img_start = -1; \
|
||||
chunk_row_count = 0; \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue