diff --git a/internal/ui/detail.go b/internal/ui/detail.go index 4c475a4..c2fa201 100644 --- a/internal/ui/detail.go +++ b/internal/ui/detail.go @@ -9,6 +9,8 @@ import ( ) const ( + coverGapCols = 2 // empty columns between the poster and the text left of it + coverGapRows = 1 // empty rows between the poster and the text below it minCoverRows = 6 // a smaller poster is not worth showing minCoverCols = 8 minTextRows = 6 // the poster never takes these rows from the text @@ -91,7 +93,9 @@ func (d *detailPane) Draw(screen tcell.Screen) { narrow, rows := w, 0 if d.coverW > 0 { - narrow, rows = w-d.coverW-1, d.coverH // one column of space left of the poster + // The text keeps clear of the poster: columns to its left, and one more + // line is wrapped narrow so nothing sits right under it. + narrow, rows = w-d.coverW-coverGapCols, d.coverH+coverGapRows } if !d.laidOut.valid || d.laidOut.width != w || d.laidOut.narrow != narrow || d.laidOut.rows != rows { d.laidOut.width, d.laidOut.narrow, d.laidOut.rows, d.laidOut.valid = w, narrow, rows, true diff --git a/internal/ui/detail_test.go b/internal/ui/detail_test.go index ef2de77..12da11f 100644 --- a/internal/ui/detail_test.go +++ b/internal/ui/detail_test.go @@ -84,12 +84,14 @@ func TestDetailPaneFlowsAroundPoster(t *testing.T) { if got := rowText(screen, 4, 1, 30); !strings.HasPrefix(got, "plot plot") { t.Errorf("the plot starts beside the poster, right after the head: %q", got) } - // Beside the poster the text stays left of it (34 columns), below it it uses the full width. - for y := 1; y <= d.coverH; y++ { - if got := strings.TrimRight(rowText(screen, y, 1, 35), " "); len([]rune(got)) > 34 { - t.Errorf("row %d runs into the poster: %q", y, got) + // Beside the poster the text stays left of it with a gap of two columns + // (58-23-2 = 33 columns), and the row right under the poster is kept clear too. + for y := 1; y <= d.coverH+coverGapRows; y++ { + if got := strings.TrimRight(rowText(screen, y, 1, 36), " "); len([]rune(got)) > 33 { + t.Errorf("row %d runs into the poster's margin: %q", y, got) } } + // Further down it uses the full width. if got := strings.TrimSpace(rowText(screen, d.coverH+3, 1, 59)); len(got) < 50 { t.Errorf("below the poster the text should use the full width: %q", got) }