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:
David Herrmann 2012-09-30 23:01:24 +02:00
parent d69414297c
commit f198f28d02

View File

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