sixel: destroy all sixels when font size is decreased

If changing the font size causes the cell size to decrease, either
horizontally or vertically (or both), then delete all sixels since the
grid space they allocated no longer is enough to hold the images.
This commit is contained in:
Daniel Eklöf 2020-06-29 21:53:29 +02:00
parent 2c4ebec4da
commit 8f5e6e85e0
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 37 additions and 1 deletions

View file

@ -1423,7 +1423,30 @@ term_font_size_adjust(struct terminal *term, double amount)
return false;
}
term_set_fonts(term, (struct fcft_font *[]){data[0].font_out, data[1].font_out, data[2].font_out, data[3].font_out});
const int old_cell_width = term->cell_width;
const int old_cell_height = term->cell_height;
if (!term_set_fonts(term, (struct fcft_font *[]){data[0].font_out, data[1].font_out, data[2].font_out, data[3].font_out}))
return false;
if (term->cell_width < old_cell_width ||
term->cell_height < old_cell_height)
{
/*
* The cell size has decreased.
*
* This means sixels, which we cannot resize, no longer fit
* into their "allocated" grid space.
*
* To be able to fit them, we would have to change the grid
* content. Inserting empty lines _might_ seem acceptable, but
* we'd also need to insert empty columns, which would break
* existing layout completely.
*
* So we delete them.
*/
sixel_destroy_all(term);
}
return true;
}