diff options
| author | Pietro Gagliardi <[email protected]> | 2014-07-02 22:53:03 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-07-02 22:53:03 -0400 |
| commit | 8a81650b3da7ce00725336df9e03b38e935c5a65 (patch) | |
| tree | 08af843f0460e7226f305cf7162021ef54e8c3f7 /layout.go | |
| parent | 4dd5ceb11d62bd6b9af4847936314a9d8c45707f (diff) | |
Moved it all back; the preemptive multitaksing during an event handler kills us on all platforms. Going to have to restrict ALL GUI accss to happening from one t hread, so going to need to drop uitask entirely and have just a start() callback for startup code and a post() function for posting requests to windows (like channel sends but into a perpetual buffer).
Diffstat (limited to 'layout.go')
| -rw-r--r-- | layout.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/layout.go b/layout.go new file mode 100644 index 0000000..e88cae4 --- /dev/null +++ b/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 +} |
