Round the corners of page previews

This commit is contained in:
Jobobby04 2022-11-13 13:57:05 -05:00
parent 9870c23a5b
commit 5afc33becb
3 changed files with 35 additions and 24 deletions

View File

@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
@ -19,6 +20,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@ -47,11 +49,13 @@ fun PagePreviews(
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
pagePreviewState.pagePreviews.take(4 * itemPerRowCount).chunked(itemPerRowCount).forEach {
Row(
modifier = Modifier.fillMaxWidth(),
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp),
) {
it.forEach { page ->
PagePreview(
@ -80,8 +84,8 @@ fun PagePreview(
) {
Column(
modifier
.clickable { onOpenPage(page.index - 1) }
.padding(horizontal = 8.dp, vertical = 4.dp),
.clip(MaterialTheme.shapes.small)
.clickable { onOpenPage(page.index - 1) },
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceBetween,
) {
@ -90,10 +94,10 @@ fun PagePreview(
contentDescription = null,
loading = {
val progress by page.progress.collectAsState()
if (progress != -1) {
CircularProgressIndicator(progress / 0.01F)
} else {
if (progress < 0) {
CircularProgressIndicator()
} else {
CircularProgressIndicator(progress / 0.01F)
}
},
success = {
@ -101,7 +105,8 @@ fun PagePreview(
contentDescription = null,
modifier = Modifier
.width(120.dp)
.heightIn(max = 200.dp),
.heightIn(max = 200.dp)
.clip(MaterialTheme.shapes.small),
contentScale = ContentScale.FillWidth,
)
},

View File

@ -10,8 +10,8 @@ import eu.kanade.domain.manga.model.COMIC_INFO_FILE
import eu.kanade.domain.manga.model.ComicInfo
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.getComicInfo
import eu.kanade.domain.track.interactor.GetTracks
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.domain.track.interactor.GetTracks
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.database.models.toDomainChapter

View File

@ -2,10 +2,13 @@ package exh.pagepreview.components
import androidx.compose.animation.core.AnimationState
import androidx.compose.animation.core.animateTo
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.UTurnRight
@ -17,7 +20,6 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
@ -70,8 +72,12 @@ fun PagePreviewScreen(
PagePreviewState.Loading -> LoadingScreen()
is PagePreviewState.Success -> {
BoxWithConstraints(Modifier.fillMaxSize()) {
val itemPerRowCount by derivedStateOf { (maxWidth / 120.dp).floor() }
val items by derivedStateOf { state.pagePreviews.chunked(itemPerRowCount) }
val itemPerRowCount = remember(maxWidth) {
(maxWidth / 120.dp).floor()
}
val items = remember(state.pagePreviews, itemPerRowCount) {
state.pagePreviews.chunked(itemPerRowCount)
}
val lazyListState = key(state.page) {
rememberLazyListState()
}
@ -79,20 +85,20 @@ fun PagePreviewScreen(
state = lazyListState,
modifier = Modifier,
contentPadding = paddingValues + topPaddingValues,
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
items.forEach {
item {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
) {
it.forEach { page ->
PagePreview(
modifier = Modifier.weight(1F),
page = page,
onOpenPage = onOpenPage,
)
}
items(items) {
Row(
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp),
) {
it.forEach { page ->
PagePreview(
modifier = Modifier.weight(1F),
page = page,
onOpenPage = onOpenPage,
)
}
}
}