summaryrefslogtreecommitdiff
path: root/sway/commands/resize.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands/resize.c')
-rw-r--r--sway/commands/resize.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/sway/commands/resize.c b/sway/commands/resize.c
index 0f3005f4..ad659ef5 100644
--- a/sway/commands/resize.c
+++ b/sway/commands/resize.c
@@ -5,6 +5,7 @@
#include <stdlib.h>
#include <string.h>
#include <strings.h>
+#include <wlr/util/edges.h>
#include <wlr/util/log.h>
#include "sway/commands.h"
#include "sway/tree/arrange.h"
@@ -158,6 +159,27 @@ static int parallel_size(struct sway_container *c, enum resize_axis a) {
return normalize_axis(a) == RESIZE_AXIS_HORIZONTAL ? c->width : c->height;
}
+static void container_recursive_resize(struct sway_container *container,
+ double amount, enum wlr_edges edge) {
+ bool layout_match = true;
+ wlr_log(WLR_DEBUG, "Resizing %p with amount: %f", container, amount);
+ if (edge == WLR_EDGE_LEFT || edge == WLR_EDGE_RIGHT) {
+ container->width += amount;
+ layout_match = container->layout == L_HORIZ;
+ } else if (edge == WLR_EDGE_TOP || edge == WLR_EDGE_BOTTOM) {
+ container->height += amount;
+ layout_match = container->layout == L_VERT;
+ }
+ if (container->children) {
+ for (int i = 0; i < container->children->length; i++) {
+ struct sway_container *child = container->children->items[i];
+ double amt = layout_match ?
+ amount / container->children->length : amount;
+ container_recursive_resize(child, amt, edge);
+ }
+ }
+}
+
static void resize_tiled(struct sway_container *parent, int amount,
enum resize_axis axis) {
struct sway_container *focused = parent;
@@ -250,10 +272,10 @@ static void resize_tiled(struct sway_container *parent, int amount,
}
}
- enum resize_edge minor_edge = axis == RESIZE_AXIS_HORIZONTAL ?
- RESIZE_EDGE_LEFT : RESIZE_EDGE_TOP;
- enum resize_edge major_edge = axis == RESIZE_AXIS_HORIZONTAL ?
- RESIZE_EDGE_RIGHT : RESIZE_EDGE_BOTTOM;
+ enum wlr_edges minor_edge = axis == RESIZE_AXIS_HORIZONTAL ?
+ WLR_EDGE_LEFT : WLR_EDGE_TOP;
+ enum wlr_edges major_edge = axis == RESIZE_AXIS_HORIZONTAL ?
+ WLR_EDGE_RIGHT : WLR_EDGE_BOTTOM;
for (int i = 0; i < parent->parent->children->length; i++) {
struct sway_container *sibling = parent->parent->children->items[i];