diff --git a/resources/wdisplays.ui b/resources/wdisplays.ui
index d2b2bd6..9092338 100644
--- a/resources/wdisplays.ui
+++ b/resources/wdisplays.ui
@@ -150,7 +150,7 @@
True
canvas_horiz
canvas_vert
- 300
+ 400
300
diff --git a/src/main.c b/src/main.c
index 6d86b33..09ed054 100644
--- a/src/main.c
+++ b/src/main.c
@@ -38,7 +38,7 @@ __attribute__((noreturn)) void wd_fatal_error(int status, const char *message) {
#define DEFAULT_ZOOM 0.1
#define MIN_ZOOM (1./1000.)
#define MAX_ZOOM 1000.
-#define CANVAS_MARGIN 100
+#define CANVAS_MARGIN 40
static const char *MODE_PREFIX = "mode";
static const char *TRANSFORM_PREFIX = "transform";
@@ -201,6 +201,10 @@ static void update_scroll_size(struct wd_state *state) {
gtk_adjustment_set_page_increment(scroll_y_adj, state->render.viewport_height);
gtk_adjustment_set_step_increment(scroll_x_adj, state->render.viewport_width / 10);
gtk_adjustment_set_step_increment(scroll_y_adj, state->render.viewport_height / 10);
+ double x = gtk_adjustment_get_value(scroll_x_adj);
+ double y = gtk_adjustment_get_value(scroll_y_adj);
+ gtk_adjustment_set_value(scroll_x_adj, MIN(x, scroll_x_upper));
+ gtk_adjustment_set_value(scroll_y_adj, MIN(y, scroll_y_upper));
}
/*
@@ -212,25 +216,27 @@ static void update_canvas_size(struct wd_state *state) {
int ymin = 0;
int ymax = 0;
- struct wd_head *head;
- wl_list_for_each(head, &state->heads, link) {
- int w = head->custom_mode.width;
- int h = head->custom_mode.height;
- if (head->enabled && head->mode != NULL) {
- w = head->mode->width;
- h = head->mode->height;
+ g_autoptr(GList) forms = gtk_container_get_children(GTK_CONTAINER(state->stack));
+ for (GList *form_iter = forms; form_iter != NULL; form_iter = form_iter->next) {
+ GtkBuilder *builder = GTK_BUILDER(g_object_get_data(G_OBJECT(form_iter->data), "builder"));
+ gboolean enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "enabled")));
+ if (enabled) {
+ int x1 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "pos_x")));
+ int y1 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "pos_y")));
+ int w = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "width")));
+ int h = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "height")));
+ int x2 = x1 + w;
+ int y2 = y1 + w;
+ double scale = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "scale")));
+ if (scale > 0.) {
+ w /= scale;
+ h /= scale;
+ }
+ xmin = MIN(xmin, x1);
+ xmax = MAX(xmax, x2);
+ ymin = MIN(ymin, y1);
+ ymax = MAX(ymax, y2);
}
- if (head->scale > 0.) {
- w /= head->scale;
- h /= head->scale;
- }
-
- int x2 = head->x + w;
- int y2 = head->y + h;
- xmin = MIN(xmin, head->x);
- xmax = MAX(xmax, x2);
- ymin = MIN(ymin, head->y);
- ymax = MAX(ymax, y2);
}
// update canvas sizings
state->render.x_origin = floor(xmin * state->zoom) - CANVAS_MARGIN;
diff --git a/src/render.c b/src/render.c
index 1531db9..284770c 100644
--- a/src/render.c
+++ b/src/render.c
@@ -29,8 +29,6 @@
#include
#include
-#define CANVAS_MARGIN 100
-
#define BT_UV_VERT_SIZE (2 + 2)
#define BT_UV_QUAD_SIZE (6 * BT_UV_VERT_SIZE)
#define BT_UV_MAX (BT_COLOR_QUAD_SIZE * HEADS_MAX)