wlt: terminal: snap to console-size on resize
Instead of resizing linearly, we now always resize only to the next possible console size. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
d69414297c
commit
f198f28d02
@ -28,6 +28,7 @@
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wayland-client.h>
|
||||
@ -216,12 +217,38 @@ static void widget_prepare_resize(struct wlt_widget *widget,
|
||||
unsigned int *new_height,
|
||||
void *data)
|
||||
{
|
||||
static const bool do_snap = true;
|
||||
struct wlt_terminal *term = data;
|
||||
unsigned int w, h;
|
||||
|
||||
if (*new_width < width)
|
||||
*new_width = width;
|
||||
if (*new_height < height)
|
||||
*new_height = height;
|
||||
/* TODO: allow disabling this via command-line */
|
||||
if (do_snap) {
|
||||
if (*new_width >= width) {
|
||||
*new_width += term->font_normal->attr.width;
|
||||
} else {
|
||||
w = width - *new_width;
|
||||
w /= term->font_normal->attr.width;
|
||||
if (!w)
|
||||
w = 1;
|
||||
w *= term->font_normal->attr.width;
|
||||
*new_width += w;
|
||||
}
|
||||
if (*new_height >= height) {
|
||||
*new_height += term->font_normal->attr.height;
|
||||
} else {
|
||||
h = height - *new_height;
|
||||
h /= term->font_normal->attr.height;
|
||||
if (!h)
|
||||
h = 1;
|
||||
h *= term->font_normal->attr.height;
|
||||
*new_height += h;
|
||||
}
|
||||
} else {
|
||||
if (*new_width < width)
|
||||
*new_width = width;
|
||||
if (*new_height < height)
|
||||
*new_height = height;
|
||||
}
|
||||
}
|
||||
|
||||
static void widget_key(struct wlt_widget *widget, unsigned int mask,
|
||||
|
Loading…
x
Reference in New Issue
Block a user