@@ -2481,7 +2481,11 @@ func (m *UI) generateLayout(w, h int) uiLayout {
2483 // Add app margins
2483 // Add app margins
2484+ var appRect, helpRect image.Rectangle
2484− appRect, helpRect := layout.SplitVertical(area, layout.Fixed(area.Dy()-helpHeight))
2486+ layout.Len(area.Dy()-helpHeight),
2488+ ).Split(area).Assign(&appRect, &helpRect)
2485 appRect.Min.Y += 1
2489 appRect.Min.Y += 1
2486 appRect.Max.Y -= 1
2490 appRect.Max.Y -= 1
2487 helpRect.Min.Y -= 1
2491 helpRect.Min.Y -= 1
@@ -2510,7 +2514,11 @@ func (m *UI) generateLayout(w, h int) uiLayout {
2510 // ------
2514 // ------
2517+ var headerRect, mainRect image.Rectangle
2513− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(landingHeaderHeight))
2519+ layout.Len(landingHeaderHeight),
2521+ ).Split(appRect).Assign(&headerRect, &mainRect)
2514 uiLayout.header = headerRect
2522 uiLayout.header = headerRect
2515 uiLayout.main = mainRect
2523 uiLayout.main = mainRect
@@ -2524,8 +2532,16 @@ func (m *UI) generateLayout(w, h int) uiLayout {
2524 // editor
2532 // editor
2525 // ------
2533 // ------
2535+ var headerRect, mainRect image.Rectangle
2527− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(landingHeaderHeight))
2537+ layout.Len(landingHeaderHeight),
2539+ ).Split(appRect).Assign(&headerRect, &mainRect)
2540+ var editorRect image.Rectangle
2528− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2542+ layout.Len(mainRect.Dy()-editorHeight),
2544+ ).Split(mainRect).Assign(&mainRect, &editorRect)
2529 // Remove extra padding from editor (but keep it for header and main)
2545 // Remove extra padding from editor (but keep it for header and main)
2530 editorRect.Min.X -= 1
2546 editorRect.Min.X -= 1
2531 editorRect.Max.X += 1
2547 editorRect.Max.X += 1
@@ -2545,20 +2561,36 @@ func (m *UI) generateLayout(w, h int) uiLayout {
2545 // ------
2561 // ------
2547 const compactHeaderHeight = 1
2563 const compactHeaderHeight = 1
2564+ var headerRect, mainRect image.Rectangle
2548− headerRect, mainRect := layout.SplitVertical(appRect, layout.Fixed(compactHeaderHeight))
2566+ layout.Len(compactHeaderHeight),
2568+ ).Split(appRect).Assign(&headerRect, &mainRect)
2549− detailsHeight := min(sessionDetailsMaxHeight, area.Dy()-1) // One row for the header
2569+ detailsHeight := min(sessionDetailsMaxHeight, area.Dy()-1) // One row for the header
2550− sessionDetailsArea, _ := layout.SplitVertical(appRect, layout.Fixed(detailsHeight))
2570+ var sessionDetailsArea image.Rectangle
2572+ layout.Len(detailsHeight),
2574+ ).Split(appRect).Assign(&sessionDetailsArea, new(image.Rectangle))
2551 uiLayout.sessionDetails = sessionDetailsArea
2575 uiLayout.sessionDetails = sessionDetailsArea
2552 uiLayout.sessionDetails.Min.Y += compactHeaderHeight // adjust for header
2576 uiLayout.sessionDetails.Min.Y += compactHeaderHeight // adjust for header
2553 // Add one line gap between header and main content
2577 // Add one line gap between header and main content
2554 mainRect.Min.Y += 1
2578 mainRect.Min.Y += 1
2579+ var editorRect image.Rectangle
2555− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2581+ layout.Len(mainRect.Dy()-editorHeight),
2583+ ).Split(mainRect).Assign(&mainRect, &editorRect)
2556 mainRect.Max.X -= 1 // Add padding right
2584 mainRect.Max.X -= 1 // Add padding right
2557 uiLayout.header = headerRect
2585 uiLayout.header = headerRect
2558 pillsHeight := m.pillsAreaHeight()
2586 pillsHeight := m.pillsAreaHeight()
2559 if pillsHeight > 0 {
2587 if pillsHeight > 0 {
2560 pillsHeight = min(pillsHeight, mainRect.Dy())
2588 pillsHeight = min(pillsHeight, mainRect.Dy())
2589+ var chatRect, pillsRect image.Rectangle
2561− chatRect, pillsRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-pillsHeight))
2591+ layout.Len(mainRect.Dy()-pillsHeight),
2593+ ).Split(mainRect).Assign(&chatRect, &pillsRect)
2562 uiLayout.main = chatRect
2594 uiLayout.main = chatRect
2563 uiLayout.pills = pillsRect
2595 uiLayout.pills = pillsRect
2564 } else {
2596 } else {
@@ -2577,16 +2609,28 @@ func (m *UI) generateLayout(w, h int) uiLayout {
2577 // ----------
2609 // ----------
2612+ var mainRect, sideRect image.Rectangle
2580− mainRect, sideRect := layout.SplitHorizontal(appRect, layout.Fixed(appRect.Dx()-sidebarWidth))
2614+ layout.Len(appRect.Dx()-sidebarWidth),
2616+ ).Split(appRect).Assign(&mainRect, &sideRect)
2581 // Add padding left
2617 // Add padding left
2582 sideRect.Min.X += 1
2618 sideRect.Min.X += 1
2619+ var editorRect image.Rectangle
2583− mainRect, editorRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-editorHeight))
2621+ layout.Len(mainRect.Dy()-editorHeight),
2623+ ).Split(mainRect).Assign(&mainRect, &editorRect)
2584 mainRect.Max.X -= 1 // Add padding right
2624 mainRect.Max.X -= 1 // Add padding right
2585 uiLayout.sidebar = sideRect
2625 uiLayout.sidebar = sideRect
2586 pillsHeight := m.pillsAreaHeight()
2626 pillsHeight := m.pillsAreaHeight()
2587 if pillsHeight > 0 {
2627 if pillsHeight > 0 {
2588 pillsHeight = min(pillsHeight, mainRect.Dy())
2628 pillsHeight = min(pillsHeight, mainRect.Dy())
2629+ var chatRect, pillsRect image.Rectangle
2589− chatRect, pillsRect := layout.SplitVertical(mainRect, layout.Fixed(mainRect.Dy()-pillsHeight))
2631+ layout.Len(mainRect.Dy()-pillsHeight),
2633+ ).Split(mainRect).Assign(&chatRect, &pillsRect)
2590 uiLayout.main = chatRect
2634 uiLayout.main = chatRect
2591 uiLayout.pills = pillsRect
2635 uiLayout.pills = pillsRect
2592 } else {
2636 } else {