forked from andlabs/ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlayout.go
36 lines (32 loc) · 1019 Bytes
/
layout.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
}