sixel: change default max size to 10000x10000

It used to be the size of the window. This caused images to be cropped
when the application emitting them didn’t change the max size.
This commit is contained in:
Daniel Eklöf 2020-11-23 20:10:55 +01:00
parent 90edc09697
commit ba8b15d675
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 21 additions and 27 deletions

View file

@ -90,6 +90,8 @@ means foot can be PGO:d in e.g. sandboxed build scripts. See
overflow into neighboring cells by default. Set overflow into neighboring cells by default. Set
**tweak.allow-overflowing-double-width-glyphs** to no to disable **tweak.allow-overflowing-double-width-glyphs** to no to disable
this. this.
* Sixel default maximum size is now 10000x10000 instead of the current
window size.
### Deprecated ### Deprecated

View file

@ -13,6 +13,7 @@
#include "async.h" #include "async.h"
#include "config.h" #include "config.h"
#include "sixel.h"
#include "user-notification.h" #include "user-notification.h"
#include "vt.h" #include "vt.h"
@ -200,7 +201,12 @@ main(int argc, const char *const *argv)
.delayed_render_timer = { .delayed_render_timer = {
.lower_fd = lower_fd, .lower_fd = lower_fd,
.upper_fd = upper_fd .upper_fd = upper_fd
} },
.sixel = {
.palette_size = SIXEL_MAX_COLORS,
.max_width = SIXEL_MAX_WIDTH,
.max_height = SIXEL_MAX_HEIGHT,
},
}; };
tll_push_back(wayl.terms, &term); tll_push_back(wayl.terms, &term);

34
sixel.c
View file

@ -778,24 +778,6 @@ sixel_unhook(struct terminal *term)
render_refresh(term); render_refresh(term);
} }
static unsigned
max_width(const struct terminal *term)
{
/* foot extension - treat 0 to mean current terminal size */
return term->sixel.max_width == 0
? term->cols * term->cell_width
: term->sixel.max_width;
}
static unsigned
max_height(const struct terminal *term)
{
/* foot extension - treat 0 to mean current terminal size */
return term->sixel.max_height == 0
? term->rows * term->cell_height
: term->sixel.max_height;
}
static bool static bool
resize(struct terminal *term, int new_width, int new_height) resize(struct terminal *term, int new_width, int new_height)
{ {
@ -863,8 +845,8 @@ sixel_add(struct terminal *term, uint32_t color, uint8_t sixel)
{ {
//LOG_DBG("adding sixel %02hhx using color 0x%06x", sixel, color); //LOG_DBG("adding sixel %02hhx using color 0x%06x", sixel, color);
if (term->sixel.pos.col >= max_width(term) || if (term->sixel.pos.col >= term->sixel.max_width ||
term->sixel.pos.row * 6 + 5 >= max_height(term)) term->sixel.pos.row * 6 + 5 >= term->sixel.max_height)
{ {
return; return;
} }
@ -990,7 +972,7 @@ decgra(struct terminal *term, uint8_t c)
pan, pad, pan / pad, ph, pv); pan, pad, pan / pad, ph, pv);
if (ph >= term->sixel.image.height && pv >= term->sixel.image.width && if (ph >= term->sixel.image.height && pv >= term->sixel.image.width &&
ph <= max_height(term) && pv <= max_width(term)) ph <= term->sixel.max_height && pv <= term->sixel.max_width)
{ {
if (resize(term, ph, pv)) if (resize(term, ph, pv))
term->sixel.image.autosize = false; term->sixel.image.autosize = false;
@ -1163,19 +1145,19 @@ sixel_geometry_report_current(struct terminal *term)
{ {
char reply[64]; char reply[64];
snprintf(reply, sizeof(reply), "\033[?2;0;%u;%uS", snprintf(reply, sizeof(reply), "\033[?2;0;%u;%uS",
max_width(term), max_height(term)); term->sixel.max_width, term->sixel.max_height);
term_to_slave(term, reply, strlen(reply)); term_to_slave(term, reply, strlen(reply));
LOG_DBG("query response for current sixel geometry: %ux%u", LOG_DBG("query response for current sixel geometry: %ux%u",
max_width(term), max_height(term)); term->sixel.max_width, term->sixel.max_height);
} }
void void
sixel_geometry_reset(struct terminal *term) sixel_geometry_reset(struct terminal *term)
{ {
LOG_DBG("sixel geometry reset to %ux%u", max_width(term), max_height(term)); LOG_DBG("sixel geometry reset to %ux%u", SIXEL_MAX_WIDTH, SIXEL_MAX_HEIGHT);
term->sixel.max_width = 0; term->sixel.max_width = SIXEL_MAX_WIDTH;
term->sixel.max_height = 0; term->sixel.max_height = SIXEL_MAX_HEIGHT;
sixel_geometry_report_current(term); sixel_geometry_report_current(term);
} }

View file

@ -3,6 +3,8 @@
#include "terminal.h" #include "terminal.h"
#define SIXEL_MAX_COLORS 1024u #define SIXEL_MAX_COLORS 1024u
#define SIXEL_MAX_WIDTH 10000u
#define SIXEL_MAX_HEIGHT 10000u
void sixel_fini(struct terminal *term); void sixel_fini(struct terminal *term);

View file

@ -1109,6 +1109,8 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper,
}, },
.sixel = { .sixel = {
.palette_size = SIXEL_MAX_COLORS, .palette_size = SIXEL_MAX_COLORS,
.max_width = SIXEL_MAX_WIDTH,
.max_height = SIXEL_MAX_HEIGHT,
}, },
.hold_at_exit = conf->hold_at_exit, .hold_at_exit = conf->hold_at_exit,
.shutdown_cb = shutdown_cb, .shutdown_cb = shutdown_cb,