diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt index b7e610695..9326613b7 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt @@ -33,7 +33,7 @@ import kotlin.math.abs * @return a [Float] in the range [firstItemPosition..nextItemPosition) where nextItemPosition * is the index of the consecutive item along the major axis. * */ -internal inline fun LazyState.interpolateFirstItemIndex( +internal inline fun LazyState.interpolateIndex( visibleItems: List, crossinline itemSize: LazyState.(LazyStateItem) -> Int, crossinline offset: LazyState.(LazyStateItem) -> Int, diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt index 3fcc8f2c0..946b8a3b1 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt @@ -51,7 +51,7 @@ fun LazyListState.scrollbarState( if (visibleItemsInfo.isEmpty()) return@snapshotFlow null val firstIndex = min( - a = interpolateFirstItemIndex( + a = interpolateIndex( visibleItems = visibleItemsInfo, itemSize = { it.size }, offset = { it.offset }, @@ -114,8 +114,11 @@ fun LazyGridState.scrollbarState( if (visibleItemsInfo.isEmpty()) return@snapshotFlow null val firstIndex = min( - a = interpolateFirstItemIndex( - visibleItems = visibleItemsInfo, + a = interpolateIndex( + visibleItems = when (layoutInfo.orientation) { + Orientation.Vertical -> layoutInfo.visibleItemsInfo.filter { it.row == 0 } + Orientation.Horizontal -> layoutInfo.visibleItemsInfo.filter { it.column == 0 } + }, itemSize = { layoutInfo.orientation.valueOf(it.size) }, offset = { layoutInfo.orientation.valueOf(it.offset) }, nextItemOnMainAxis = { first -> @@ -188,8 +191,8 @@ fun LazyStaggeredGridState.scrollbarState( if (visibleItemsInfo.isEmpty()) return@snapshotFlow null val firstIndex = min( - a = interpolateFirstItemIndex( - visibleItems = visibleItemsInfo, + a = interpolateIndex( + visibleItems = layoutInfo.visibleItemsInfo.filter { it.lane == 0 }, itemSize = { layoutInfo.orientation.valueOf(it.size) }, offset = { layoutInfo.orientation.valueOf(it.offset) }, nextItemOnMainAxis = { first ->