diff --git a/CHANGELOG.md b/CHANGELOG.md index 093d526c..cd57185d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,8 @@ means foot can be PGO:d in e.g. sandboxed build scripts. See overflow into neighboring cells by default. Set **tweak.allow-overflowing-double-width-glyphs** to ‘no’ to disable this. +* Sixel default maximum size is now 10000x10000 instead of the current + window size. ### Deprecated diff --git a/pgo/pgo.c b/pgo/pgo.c index aa73187e..d401e533 100644 --- a/pgo/pgo.c +++ b/pgo/pgo.c @@ -13,6 +13,7 @@ #include "async.h" #include "config.h" +#include "sixel.h" #include "user-notification.h" #include "vt.h" @@ -200,7 +201,12 @@ main(int argc, const char *const *argv) .delayed_render_timer = { .lower_fd = lower_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); diff --git a/sixel.c b/sixel.c index 46927d07..bf06ef3e 100644 --- a/sixel.c +++ b/sixel.c @@ -778,24 +778,6 @@ sixel_unhook(struct terminal *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 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); - if (term->sixel.pos.col >= max_width(term) || - term->sixel.pos.row * 6 + 5 >= max_height(term)) + if (term->sixel.pos.col >= term->sixel.max_width || + term->sixel.pos.row * 6 + 5 >= term->sixel.max_height) { return; } @@ -990,7 +972,7 @@ decgra(struct terminal *term, uint8_t c) pan, pad, pan / pad, ph, pv); 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)) term->sixel.image.autosize = false; @@ -1163,19 +1145,19 @@ sixel_geometry_report_current(struct terminal *term) { char reply[64]; 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)); 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 sixel_geometry_reset(struct terminal *term) { - LOG_DBG("sixel geometry reset to %ux%u", max_width(term), max_height(term)); - term->sixel.max_width = 0; - term->sixel.max_height = 0; + LOG_DBG("sixel geometry reset to %ux%u", SIXEL_MAX_WIDTH, SIXEL_MAX_HEIGHT); + term->sixel.max_width = SIXEL_MAX_WIDTH; + term->sixel.max_height = SIXEL_MAX_HEIGHT; sixel_geometry_report_current(term); } diff --git a/sixel.h b/sixel.h index 6cd7324e..f72cf260 100644 --- a/sixel.h +++ b/sixel.h @@ -3,6 +3,8 @@ #include "terminal.h" #define SIXEL_MAX_COLORS 1024u +#define SIXEL_MAX_WIDTH 10000u +#define SIXEL_MAX_HEIGHT 10000u void sixel_fini(struct terminal *term); diff --git a/terminal.c b/terminal.c index f78e103c..349fd9bf 100644 --- a/terminal.c +++ b/terminal.c @@ -1109,6 +1109,8 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper, }, .sixel = { .palette_size = SIXEL_MAX_COLORS, + .max_width = SIXEL_MAX_WIDTH, + .max_height = SIXEL_MAX_HEIGHT, }, .hold_at_exit = conf->hold_at_exit, .shutdown_cb = shutdown_cb,