diff --git a/ui/column.go b/ui/column.go index 68fa3f8..313323f 100644 --- a/ui/column.go +++ b/ui/column.go @@ -232,6 +232,11 @@ func slideUp(c *column, i int, delta int) bool { y := c.frames[i].bounds().Min.Y - delta if sz := y - c.frames[i-1].bounds().Min.Y - borderWidth; sz < min { if !slideUp(c, i-1, min-sz) { + sum := 0 + for j := 0; j < i; j++ { + sum += c.frames[j].minHeight() + } + c.ys[i] = float64(sum) / float64(c.Dy()) return false } } @@ -243,10 +248,15 @@ func slideDown(c *column, i int, delta int) bool { if i > len(c.frames)-2 { return false } - min := c.frames[i].minHeight() + min := c.frames[i+1].minHeight() y := c.frames[i].bounds().Max.Y + delta if sz := c.frames[i+1].bounds().Max.Y - borderWidth - y; sz < min { if !slideDown(c, i+1, min-sz) { + sum := 0 + for j := len(c.frames) - 1; j > i; j-- { + sum += c.frames[j].minHeight() + } + c.ys[i+1] = 1. - float64(sum)/float64(c.Dy()) return false } } diff --git a/ui/window.go b/ui/window.go index a58ac1c..f6a370c 100644 --- a/ui/window.go +++ b/ui/window.go @@ -444,6 +444,7 @@ func slideLeft(w *window, i int, delta int) bool { x := w.columns[i].Min.X - delta if sz := x - w.columns[i-1].Min.X; sz < minFrameWidth { if !slideLeft(w, i-1, minFrameWidth-sz) { + w.xs[i] = float64(i*minFrameWidth) / float64(w.Dx()) return false } } @@ -456,8 +457,9 @@ func slideRight(w *window, i int, delta int) bool { return false } x := w.columns[i].Max.X + delta - if sz := w.columns[i+1].Max.X - borderWidth - x; sz < minFrameWidth { + if sz := w.columns[i+1].Max.X - borderWidth - x; sz <= minFrameWidth { if !slideRight(w, i+1, minFrameWidth-sz) { + w.xs[i+1] = 1. - float64((len(w.columns)-i-2)*minFrameWidth)/float64(w.Dx()) return false } }