feature: add resize-keep-grid to allow text reflow on font changes

This commit is contained in:
Andrew J. Hesford 2024-08-14 10:35:58 -04:00 committed by Daniel Eklöf
parent a2fc2a986e
commit 1969717527
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 23 additions and 1 deletions

View file

@ -931,6 +931,9 @@ parse_section_main(struct context *ctx)
else if (streq(key, "resize-by-cells"))
return value_to_bool(ctx, &conf->resize_by_cells);
else if (streq(key, "resize-keep-grid"))
return value_to_bool(ctx, &conf->resize_keep_grid);
else if (streq(key, "bold-text-in-bright")) {
if (streq(value, "palette-based")) {
conf->bold_in_bright.enabled = true;
@ -3101,6 +3104,7 @@ config_load(struct config *conf, const char *conf_path,
.pad_x = 0,
.pad_y = 0,
.resize_by_cells = true,
.resize_keep_grid = true,
.resize_delay_ms = 100,
.bold_in_bright = {
.enabled = false,

View file

@ -140,6 +140,7 @@ struct config {
bool center;
bool resize_by_cells;
bool resize_keep_grid;
uint16_t resize_delay_ms;

View file

@ -287,6 +287,18 @@ empty string to be set, but it must be quoted: *KEY=""*)
Default: _yes_
*resize-keep-grid*
Boolean.
When set to *yes*, the window size will be adjusted with changes in font
size to preserve the dimensions of the text grid. When set to *no*, the
window size will remain constant and the text grid will be adjusted as
necessary to fit the window.
This option only applies to floating windows.
Default: _yes_
*initial-window-size-pixels*
Initial window width and height in _pixels_ (subject to output
scaling), in the form _WIDTHxHEIGHT_. The height _includes_ the

View file

@ -27,6 +27,7 @@
# initial-window-mode=windowed
# pad=0x0 # optionally append 'center'
# resize-by-cells=yes
# resize-keep-grid=yes
# resize-delay-ms=100
# bold-text-in-bright=no

View file

@ -819,11 +819,15 @@ term_set_fonts(struct terminal *term, struct fcft_font *fonts[static 4],
* render_resize() after this function */
if (resize_grid) {
/* Use force, since cell-width/height may have changed */
enum resize_options resize_opts = RESIZE_FORCE;
if (conf->resize_keep_grid)
resize_opts |= RESIZE_KEEP_GRID;
render_resize(
term,
(int)roundf(term->width / term->scale),
(int)roundf(term->height / term->scale),
RESIZE_FORCE | RESIZE_KEEP_GRID);
resize_opts);
}
return true;
}