summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ui/grid.go17
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/ui/grid.go b/lib/ui/grid.go
index 5011a81..3f5dd60 100644
--- a/lib/ui/grid.go
+++ b/lib/ui/grid.go
@@ -134,14 +134,25 @@ func (grid *Grid) reflow(ctx *Context) {
}
}
offset := 0
+ remainingExact := 0
+ if weight > 0 {
+ remainingExact = (extent - exact) % weight
+ }
for _, spec := range *specs {
layout := gridLayout{Offset: offset}
if spec.Strategy == SIZE_EXACT {
layout.Size = spec.Size
} else if spec.Strategy == SIZE_WEIGHT {
- size := float64(spec.Size) / float64(weight)
- size *= float64(extent - exact)
- layout.Size = int(math.Floor(size))
+ proportion := float64(spec.Size) / float64(weight)
+ size := proportion * float64(extent-exact)
+ if remainingExact > 0 {
+ extraExact := int(math.Ceil(proportion * float64(remainingExact)))
+ layout.Size = int(math.Floor(size)) + extraExact
+ remainingExact -= extraExact
+
+ } else {
+ layout.Size = int(math.Floor(size))
+ }
}
offset += layout.Size
*layouts = append(*layouts, layout)