diff options
Diffstat (limited to 'sway/tree/layout.c')
-rw-r--r-- | sway/tree/layout.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sway/tree/layout.c b/sway/tree/layout.c index 5abdbc32..7e2c61ed 100644 --- a/sway/tree/layout.c +++ b/sway/tree/layout.c | |||
@@ -729,3 +729,24 @@ struct sway_container *container_split(struct sway_container *child, | |||
729 | 729 | ||
730 | return cont; | 730 | return cont; |
731 | } | 731 | } |
732 | |||
733 | void container_recursive_resize(struct sway_container *container, | ||
734 | double amount, enum resize_edge edge) { | ||
735 | bool layout_match = true; | ||
736 | wlr_log(L_DEBUG, "Resizing %p with amount: %f", container, amount); | ||
737 | if (edge == RESIZE_EDGE_LEFT || edge == RESIZE_EDGE_RIGHT) { | ||
738 | container->width += amount; | ||
739 | layout_match = container->layout == L_HORIZ; | ||
740 | } else if (edge == RESIZE_EDGE_TOP || edge == RESIZE_EDGE_BOTTOM) { | ||
741 | container->height += amount; | ||
742 | layout_match = container->layout == L_VERT; | ||
743 | } | ||
744 | if (container->children) { | ||
745 | for (int i = 0; i < container->children->length; i++) { | ||
746 | struct sway_container *child = container->children->items[i]; | ||
747 | double amt = layout_match ? | ||
748 | amount / container->children->length : amount; | ||
749 | container_recursive_resize(child, amt, edge); | ||
750 | } | ||
751 | } | ||
752 | } | ||