about summary refs log tree commit diff stats
path: root/lib/ui
diff options
context:
space:
mode:
authorJeffas <dev@jeffas.io>2019-07-16 20:21:28 +0100
committerDrew DeVault <sir@cmpwn.com>2019-07-17 16:00:49 -0400
commit4991c344ab754922e9af558c59d9797c7e5ce5cf (patch)
tree5dbbda21ba5c7bde5c87e0abca9ec6770009650c /lib/ui
parent06af5391a37f5bb59571a641ad832e45d8f39f1e (diff)
downloadaerc-4991c344ab754922e9af558c59d9797c7e5ce5cf.tar.gz
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.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)