config: add optional ‘center’ argument to ‘pad’

When set, the grid contents is centered in the window. I.e. the
left/right and top/bottom margins are equal (+- 1px).

This causes the content to “jump” while doing an interactive resize,
but may still be preferred in e.g. a tiling WM.

Closes #273
This commit is contained in:
Daniel Eklöf 2021-01-06 11:17:29 +01:00
parent 21dbb44a30
commit e14c592f39
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
6 changed files with 44 additions and 8 deletions

View file

@ -2638,10 +2638,20 @@ maybe_resize(struct terminal *term, int width, int height, bool force)
assert(new_rows >= 1);
/* Margins */
term->margins.left = pad_x;
term->margins.top = pad_y;
term->margins.right = term->width - new_cols * term->cell_width - term->margins.left;
term->margins.bottom = term->height - new_rows * term->cell_height - term->margins.top;
const int grid_width = new_cols * term->cell_width;
const int grid_height = new_rows * term->cell_height;
const int total_x_pad = term->width - grid_width;
const int total_y_pad = term->height - grid_height;
if (term->conf->center) {
term->margins.left = total_x_pad / 2;
term->margins.top = total_y_pad / 2;
} else {
term->margins.left = pad_x;
term->margins.top = pad_y;
}
term->margins.right = total_x_pad - term->margins.left;
term->margins.bottom = total_y_pad - term->margins.top;
assert(term->margins.left >= pad_x);
assert(term->margins.right >= pad_x);