mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
Revert "sixel: resize: always round up height to a multiple of 6"
This reverts commit 5a9d70da837c20a9641d6cbadccc962a8e5a4283. This broke jexer. Comparing with what XTerm does, we can see that it updates its image height for *each* pixel in *each* sixel. I.e. empty pixels at the bottom of a sixel will not increase the image size. Foot currently bumps the image height 6 pixels at a time, i.e. always a whole pixel. Given this, always rounding up the height to the nearest multiple of 6 (say, for example, when responding to a DECGRA command), is wrong. Now, we use the image size specified in DECGRA as is, while still allowing the image to grow beyond that if necessary. What’s left to do, if we want to behave *exactly* like XTerm, is stop growing the image with 6 pixels at a time when dynamically adjusting the image size.
This commit is contained in:
parent
ab70b4f16a
commit
6416319a99
1 changed files with 6 additions and 4 deletions
10
sixel.c
10
sixel.c
|
|
@ -853,8 +853,10 @@ 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;
|
||||
|
||||
new_height = (new_height + 6 - 1) / 6 * 6;
|
||||
xassert(new_height % 6 == 0);
|
||||
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);
|
||||
|
||||
if (new_width > term->sixel.max_width)
|
||||
return false;
|
||||
|
|
@ -876,7 +878,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, new_width * new_height * sizeof(uint32_t));
|
||||
new_data = realloc(old_data, alloc_new_width * alloc_new_height * sizeof(uint32_t));
|
||||
if (new_data == NULL) {
|
||||
LOG_ERRNO("failed to reallocate sixel image buffer");
|
||||
return false;
|
||||
|
|
@ -887,7 +889,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(new_width * new_height * sizeof(uint32_t));
|
||||
new_data = xmalloc(alloc_new_width * alloc_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++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue