From 682827fb822943970b98e9142a22962f60d51971 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Fri, 17 Jan 2025 21:47:14 +0000 Subject: [PATCH] Fix scrolling a List item to be visible when it is larger than the template Fixes #5281 --- widget/list.go | 8 ++++++-- widget/list_internal_test.go | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/widget/list.go b/widget/list.go index e540edbdbe..50dddc4c5c 100644 --- a/widget/list.go +++ b/widget/list.go @@ -181,14 +181,18 @@ func (l *List) scrollTo(id ListItemID) { if len(l.itemHeights) == 0 { y = (float32(id) * l.itemMin.Height) + (float32(id) * separatorThickness) } else { - for i := 0; i < id; i++ { + i := 0 + for ; i < id; i++ { height := l.itemMin.Height if h, ok := l.itemHeights[i]; ok { height = h } y += height + separatorThickness - lastItemHeight = height + } + lastItemHeight = l.itemMin.Height + if h, ok := l.itemHeights[i]; ok { + lastItemHeight = h } } diff --git a/widget/list_internal_test.go b/widget/list_internal_test.go index ba83c29126..8178d03fb9 100644 --- a/widget/list_internal_test.go +++ b/widget/list_internal_test.go @@ -655,6 +655,25 @@ func TestList_RefreshUpdatesAllItems(t *testing.T) { assert.Equal(t, "0.0.", printOut) } +func TestList_ScrollToLargeItem(t *testing.T) { + list := NewList( + func() int { + return 10 + }, + func() fyne.CanvasObject { + return NewLabel("Row") + }, + func(id ListItemID, item fyne.CanvasObject) { + }, + ) + list.SetItemHeight(9, 50) + w := test.NewTempWindow(t, list) + + w.SetContent(list) + list.scrollTo(9) + assert.Equal(t, list.scroller.Content.MinSize().Height-list.Size().Height, list.scroller.Offset.Y) +} + var minSize fyne.Size func BenchmarkContentMinSize(b *testing.B) {