benchmarks/showcases/LazyGridImageView/composeApp/src/commonMain/kotlin/org/jetbrains/lazygridimage/App.kt [54:141]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - val numOfColumns = 3 // Auto-scrolling effect LaunchedEffect(autoScroll) { if (autoScroll) { while (true) { delay(100) if (scrollingDown) { if (currentIndex < uris.size - numOfColumns - 1) { currentIndex += numOfColumns } else { scrollingDown = false } } else { if (currentIndex > 0) { currentIndex -= numOfColumns } else { scrollingDown = true } } coroutineScope.launch { gridState.animateScrollToItem( index = currentIndex, ) } } } } MaterialTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { // Checkbox for auto-scrolling Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(8.dp) ) { Checkbox( checked = autoScroll, onCheckedChange = { autoScroll = it } ) Spacer(modifier = Modifier.width(8.dp)) Text("Auto Scroll") } LazyVerticalGrid( columns = GridCells.Fixed(numOfColumns), contentPadding = PaddingValues(4.dp), modifier = Modifier.fillMaxSize(), state = gridState ) { items(uris) { uri -> ImageCard( uri, modifier = Modifier.padding(4.dp) ) } } } } } } @Composable fun ImageCard( uri: String, modifier: Modifier = Modifier ) { Card( modifier = modifier .aspectRatio(1f) // Square aspect ratio .fillMaxWidth(), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { AsyncImage( model = uri, contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize() ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - benchmarks/showcases/LazyGridImageView/nativeAndroidApp/app/src/main/java/org/jetbrains/lazygridimage/MainActivity.kt [65:152]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - val numOfColumns = 3 // Auto-scrolling effect LaunchedEffect(autoScroll) { if (autoScroll) { while (true) { delay(100) if (scrollingDown) { if (currentIndex < uris.size - numOfColumns - 1) { currentIndex += numOfColumns } else { scrollingDown = false } } else { if (currentIndex > 0) { currentIndex -= numOfColumns } else { scrollingDown = true } } coroutineScope.launch { gridState.animateScrollToItem( index = currentIndex, ) } } } } MaterialTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { // Checkbox for auto-scrolling Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(8.dp) ) { Checkbox( checked = autoScroll, onCheckedChange = { autoScroll = it } ) Spacer(modifier = Modifier.width(8.dp)) Text("Auto Scroll") } LazyVerticalGrid( columns = GridCells.Fixed(numOfColumns), contentPadding = PaddingValues(4.dp), modifier = Modifier.fillMaxSize(), state = gridState ) { items(uris) { uri -> ImageCard( uri, modifier = Modifier.padding(4.dp) ) } } } } } } @Composable fun ImageCard( uri: String, modifier: Modifier = Modifier ) { Card( modifier = modifier .aspectRatio(1f) // Square aspect ratio .fillMaxWidth(), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { AsyncImage( model = uri, contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize() ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -