From 4991c344ab754922e9af558c59d9797c7e5ce5cf Mon Sep 17 00:00:00 2001 From: Jeffas Date: Tue, 16 Jul 2019 20:21:28 +0100 Subject: [PATCH] Fix grid widths when using weighted widths If the column weights do not collectively divide the extent of the grid layout then some width was not used and so would not be redrawn, resulting in previous drawings showing through. This fixes this by checking if there is any remainingExact width and if there is it is assigned to the weighted columns by their proportion from left to right. --- lib/ui/grid.go | 17 ++++++++++++++--- 1 file 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)