diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index 783d59388..f1de20abc 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/Terminal.Gui/Views/ListView.cs @@ -912,7 +912,7 @@ public class ListWrapper : IListDataSource int start = 0 ) { - container.Move (col, line); + container.Move (Math.Max (col - start, 0), line); object t = _source? [item]; if (t is null) @@ -1028,7 +1028,8 @@ public class ListWrapper : IListDataSource private void RenderUstr (ConsoleDriver driver, string ustr, int col, int line, int width, int start = 0) { - string u = TextFormatter.ClipAndJustify (ustr, width, TextAlignment.Left); + string str = start > ustr.GetColumns () ? string.Empty : ustr.Substring (Math.Min (start, ustr.ToRunes ().Length - 1)); + string u = TextFormatter.ClipAndJustify (str, width, TextAlignment.Left); driver.AddStr (u); width -= u.GetColumns (); diff --git a/UICatalog/Scenarios/ListViewWithSelection.cs b/UICatalog/Scenarios/ListViewWithSelection.cs index 4dd7d00ad..a926e50f9 100644 --- a/UICatalog/Scenarios/ListViewWithSelection.cs +++ b/UICatalog/Scenarios/ListViewWithSelection.cs @@ -84,9 +84,9 @@ public class ListViewWithSelection : Scenario _listView.DrawContent += (s, e) => { - scrollBar.Size = _listView.Source.Count - 1; + scrollBar.Size = _listView.Source.Count; scrollBar.Position = _listView.TopItem; - scrollBar.OtherScrollBarView.Size = _listView.MaxLength - 1; + scrollBar.OtherScrollBarView.Size = _listView.MaxLength; scrollBar.OtherScrollBarView.Position = _listView.LeftItem; scrollBar.Refresh (); }; diff --git a/UnitTests/Views/ListViewTests.cs b/UnitTests/Views/ListViewTests.cs index a7ee74fc7..835d0fe4e 100644 --- a/UnitTests/Views/ListViewTests.cs +++ b/UnitTests/Views/ListViewTests.cs @@ -759,4 +759,39 @@ Item 6", Assert.Equal ("Three", selected); Assert.Equal (2, lv.SelectedItem); } + + [Fact] + [AutoInitShutdown] + public void LeftItem_TopItem_Tests () + { + var source = new List (); + for (int i = 0; i < 5; i++) { + source.Add ($"Item {i}"); + } + var lv = new ListView () { + X = 1, + Width = 10, + Height = 5, + Source = new ListWrapper (source) + }; + var top = new Toplevel (); + top.Add (lv); + Application.Begin (top); + + TestHelpers.AssertDriverContentsWithFrameAre (@" + Item 0 + Item 1 + Item 2 + Item 3 + Item 4", _output); + + lv.LeftItem = 1; + lv.TopItem = 1; + Application.Refresh (); + TestHelpers.AssertDriverContentsWithFrameAre (@" + tem 1 + tem 2 + tem 3 + tem 4", _output); + } }