diff options
Diffstat (limited to 'sway/commands/resize.c')
-rw-r--r-- | sway/commands/resize.c | 30 |
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]; |