handle uneven disribution of space
This commit is contained in:
parent
40b4cd3668
commit
78d80aef6c
17
ui/ui.go
17
ui/ui.go
@ -56,22 +56,35 @@ func (c *Container) Draw(s tcell.Screen) {
|
||||
|
||||
func (c *Container) SetSize(x, y, h, w int) {
|
||||
c.x, c.y, c.h, c.w = x, y, h, w
|
||||
carry := 0
|
||||
if c.layoutMethod == LayoutVerticalEven {
|
||||
num := len(c.contents)
|
||||
extra := c.h % num
|
||||
for r := range c.contents {
|
||||
w := c.w
|
||||
h := c.h / num
|
||||
x := c.x
|
||||
y := c.y + (h * r)
|
||||
y := c.y + (h * r) + carry
|
||||
if extra > 0 { // distribute "extra" space to containers as we have some left
|
||||
h++
|
||||
extra--
|
||||
carry++
|
||||
}
|
||||
c.contents[r].Container.SetSize(x, y, h, w)
|
||||
}
|
||||
} else if c.layoutMethod == LayoutHorizontalEven {
|
||||
num := len(c.contents)
|
||||
extra := c.w % num
|
||||
for r := range c.contents {
|
||||
w := c.w / num
|
||||
h := c.h
|
||||
x := c.x + (w * r)
|
||||
x := c.x + (w * r) + carry
|
||||
y := c.y
|
||||
if extra > 0 { // distribute "extra" space to containers as we have some left
|
||||
w++
|
||||
extra--
|
||||
carry++
|
||||
}
|
||||
c.contents[r].Container.SetSize(x, y, h, w)
|
||||
}
|
||||
} else {
|
||||
|
@ -55,6 +55,32 @@ func TestContainerTwoBoxesHStack(t *testing.T) {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
func TestContainerThreeBoxesUnevenHStack(t *testing.T) {
|
||||
expect := `┌─ one ──┐┌─ two ──┐┌─ three
|
||||
│ ││ ││ │
|
||||
│ ││ ││ │
|
||||
│ ││ ││ │
|
||||
└────────┘└────────┘└───────┘
|
||||
`
|
||||
m := &MockScreen{}
|
||||
one := NewBox("one", nil, Contents{})
|
||||
two := NewBox("two", nil, Contents{})
|
||||
three := NewBox("three", nil, Contents{})
|
||||
container := NewContainer(
|
||||
Contents{{Container: one}, {Container: two}, {Container: three}},
|
||||
LayoutHorizontalEven,
|
||||
)
|
||||
m.Init()
|
||||
m.Resize(0, 0, 5, 29)
|
||||
container.SetSize(0, 0, 5, 29)
|
||||
container.Draw(m)
|
||||
result := m.DumpContents()
|
||||
if result != expect {
|
||||
fmt.Printf("expected:\n%+v", expect)
|
||||
fmt.Printf("actual:\n%+v", result)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestContainerTwoBoxesVStack(t *testing.T) {
|
||||
expect := `┌─ one ──┐
|
||||
|
Loading…
Reference in New Issue
Block a user