diff options
author | Jeffas <dev@jeffas.io> | 2019-07-16 20:21:28 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-07-17 16:00:49 -0400 |
commit | 4991c344ab754922e9af558c59d9797c7e5ce5cf (patch) | |
tree | 5dbbda21ba5c7bde5c87e0abca9ec6770009650c /lib/ui | |
parent | 06af5391a37f5bb59571a641ad832e45d8f39f1e (diff) |
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.
Diffstat (limited to 'lib/ui')
-rw-r--r-- | lib/ui/grid.go | 17 |
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) |