summaryrefslogtreecommitdiff
path: root/redo/mergeback
diff options
context:
space:
mode:
Diffstat (limited to 'redo/mergeback')
-rw-r--r--redo/mergeback/layout.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/redo/mergeback/layout.go b/redo/mergeback/layout.go
new file mode 100644
index 0000000..e88cae4
--- /dev/null
+++ b/redo/mergeback/layout.go
@@ -0,0 +1,36 @@
+package ui
+
+// Recursively replaces nils with stretchy empty spaces and changes the orientation
+// of inner stack so they are perpenticular to each other.
+func resetControls(parent *Stack) {
+ for i, control := range parent.controls {
+ switch control.(type) {
+ case *Stack:
+ stack := control.(*Stack)
+ stack.orientation = !parent.orientation
+ resetControls(stack)
+ case nil:
+ emptySpace := newStack(horizontal)
+ parent.controls[i] = emptySpace
+ parent.stretchy[i] = true
+ }
+ }
+}
+
+// Creates a new Stack from the given controls. The topmost Stack will have
+// vertical orientation and margin borders, with each nested stack being
+// oriented oppositely. Controls are displayed with a default padding
+// between them.
+func Layout(controls ...Control) *Stack {
+ stack := &Stack{
+ orientation: vertical,
+ controls: controls,
+ stretchy: make([]bool, len(controls)),
+ width: make([]int, len(controls)),
+ height: make([]int, len(controls)),
+ }
+
+ resetControls(stack)
+
+ return stack
+}