Merge branch 'increase-sixel-default-max-size'

This commit is contained in:
Daniel Eklöf 2020-11-24 19:24:07 +01:00
commit 309e30ba97
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
**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

View file

@ -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);

34
sixel.c
View file

@ -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);
}

View file

@ -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);

View file

@ -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,