From d5bf412d376fbfc89440ea24370c6a685fb18411 Mon Sep 17 00:00:00 2001 From: BDisp Date: Wed, 29 May 2024 12:34:59 +0100 Subject: [PATCH] Adjust the top considering the selected item and the frame height. --- Terminal.Gui/Views/ListView.cs | 6 ++++-- UnitTests/Views/ListViewTests.cs | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index 0ef93d00e..ae6528d94 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/Terminal.Gui/Views/ListView.cs @@ -601,10 +601,12 @@ namespace Terminal.Gui { /// public virtual bool MoveEnd () { - if (source.Count > 0 && selected != source.Count - 1) { + if (source?.Count > 0 && selected != source.Count - 1) { selected = source.Count - 1; if (top + selected > Frame.Height - 1) { - top = selected; + top = selected < Frame.Height - 1 + ? Math.Max (Frame.Height - selected + 1, 0) + : Math.Max (selected - Frame.Height + 1, 0); } OnSelectedChanged (); SetNeedsDisplay (); diff --git a/UnitTests/Views/ListViewTests.cs b/UnitTests/Views/ListViewTests.cs index f705dab25..1f6589204 100644 --- a/UnitTests/Views/ListViewTests.cs +++ b/UnitTests/Views/ListViewTests.cs @@ -300,16 +300,16 @@ namespace Terminal.Gui.ViewTests { Assert.Equal (19, lv.SelectedItem); TestHelpers.AssertDriverContentsWithFrameAre (@" ┌──────────┐ +│Line10 │ +│Line11 │ +│Line12 │ +│Line13 │ +│Line14 │ +│Line15 │ +│Line16 │ +│Line17 │ +│Line18 │ │Line19 │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ └──────────┘", output); Assert.True (lv.ScrollUp (20));