sixel: resize: always round up height to a multiple of 6

Sixels are always a multiple of six.
This commit is contained in:
Daniel Eklöf 2021-03-06 21:18:11 +01:00
parent f175575c09
commit e94f108572
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

10
sixel.c
View file

@ -848,10 +848,8 @@ resize(struct terminal *term, int new_width, int new_height)
const int old_width = term->sixel.image.width;
const int old_height = term->sixel.image.height;
int alloc_new_width = new_width;
int alloc_new_height = (new_height + 6 - 1) / 6 * 6;
xassert(alloc_new_height >= new_height);
xassert(alloc_new_height - new_height < 6);
new_height = (new_height + 6 - 1) / 6 * 6;
xassert(new_height % 6 == 0);
uint32_t *new_data = NULL;
@ -859,7 +857,7 @@ resize(struct terminal *term, int new_width, int new_height)
/* Width (and thus stride) is the same, so we can simply
* re-alloc the existing buffer */
new_data = realloc(old_data, alloc_new_width * alloc_new_height * sizeof(uint32_t));
new_data = realloc(old_data, new_width * new_height * sizeof(uint32_t));
if (new_data == NULL) {
LOG_ERRNO("failed to reallocate sixel image buffer");
return false;
@ -870,7 +868,7 @@ resize(struct terminal *term, int new_width, int new_height)
} else {
/* Width (and thus stride) change - need to allocate a new buffer */
xassert(new_width > old_width);
new_data = xmalloc(alloc_new_width * alloc_new_height * sizeof(uint32_t));
new_data = xmalloc(new_width * new_height * sizeof(uint32_t));
/* Copy old rows, and initialize new columns to background color */
for (int r = 0; r < min(old_height, new_height); r++) {