diff options
Diffstat (limited to 'sway/commands/resize.c')
-rw-r--r-- | sway/commands/resize.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sway/commands/resize.c b/sway/commands/resize.c index ea1e36ff..ad659ef5 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c | |||
@@ -159,6 +159,27 @@ static int parallel_size(struct sway_container *c, enum resize_axis a) { | |||
159 | return normalize_axis(a) == RESIZE_AXIS_HORIZONTAL ? c->width : c->height; | 159 | return normalize_axis(a) == RESIZE_AXIS_HORIZONTAL ? c->width : c->height; |
160 | } | 160 | } |
161 | 161 | ||
162 | static void container_recursive_resize(struct sway_container *container, | ||
163 | double amount, enum wlr_edges edge) { | ||
164 | bool layout_match = true; | ||
165 | wlr_log(WLR_DEBUG, "Resizing %p with amount: %f", container, amount); | ||
166 | if (edge == WLR_EDGE_LEFT || edge == WLR_EDGE_RIGHT) { | ||
167 | container->width += amount; | ||
168 | layout_match = container->layout == L_HORIZ; | ||
169 | } else if (edge == WLR_EDGE_TOP || edge == WLR_EDGE_BOTTOM) { | ||
170 | container->height += amount; | ||
171 | layout_match = container->layout == L_VERT; | ||
172 | } | ||
173 | if (container->children) { | ||
174 | for (int i = 0; i < container->children->length; i++) { | ||
175 | struct sway_container *child = container->children->items[i]; | ||
176 | double amt = layout_match ? | ||
177 | amount / container->children->length : amount; | ||
178 | container_recursive_resize(child, amt, edge); | ||
179 | } | ||
180 | } | ||
181 | } | ||
182 | |||
162 | static void resize_tiled(struct sway_container *parent, int amount, | 183 | static void resize_tiled(struct sway_container *parent, int amount, |
163 | enum resize_axis axis) { | 184 | enum resize_axis axis) { |
164 | struct sway_container *focused = parent; | 185 | struct sway_container *focused = parent; |