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.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -19,6 +20,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -47,11 +49,13 @@ fun PagePreviews(
Column( Column(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
pagePreviewState.pagePreviews.take(4 * itemPerRowCount).chunked(itemPerRowCount).forEach { pagePreviewState.pagePreviews.take(4 * itemPerRowCount).chunked(itemPerRowCount).forEach {
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp),
) { ) {
it.forEach { page -> it.forEach { page ->
PagePreview( PagePreview(
@ -80,8 +84,8 @@ fun PagePreview(
) { ) {
Column( Column(
modifier modifier
.clickable { onOpenPage(page.index - 1) } .clip(MaterialTheme.shapes.small)
.padding(horizontal = 8.dp, vertical = 4.dp), .clickable { onOpenPage(page.index - 1) },
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceBetween, verticalArrangement = Arrangement.SpaceBetween,
) { ) {
@ -90,10 +94,10 @@ fun PagePreview(
contentDescription = null, contentDescription = null,
loading = { loading = {
val progress by page.progress.collectAsState() val progress by page.progress.collectAsState()
if (progress != -1) { if (progress < 0) {
CircularProgressIndicator(progress / 0.01F)
} else {
CircularProgressIndicator() CircularProgressIndicator()
} else {
CircularProgressIndicator(progress / 0.01F)
} }
}, },
success = { success = {
@ -101,7 +105,8 @@ fun PagePreview(
contentDescription = null, contentDescription = null,
modifier = Modifier modifier = Modifier
.width(120.dp) .width(120.dp)
.heightIn(max = 200.dp), .heightIn(max = 200.dp)
.clip(MaterialTheme.shapes.small),
contentScale = ContentScale.FillWidth, 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.ComicInfo
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.getComicInfo 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.source.service.SourcePreferences
import eu.kanade.domain.track.interactor.GetTracks
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.database.models.toDomainChapter 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.AnimationState
import androidx.compose.animation.core.animateTo import androidx.compose.animation.core.animateTo
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth 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.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.UTurnRight 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.TextButton
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.key import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -70,8 +72,12 @@ fun PagePreviewScreen(
PagePreviewState.Loading -> LoadingScreen() PagePreviewState.Loading -> LoadingScreen()
is PagePreviewState.Success -> { is PagePreviewState.Success -> {
BoxWithConstraints(Modifier.fillMaxSize()) { BoxWithConstraints(Modifier.fillMaxSize()) {
val itemPerRowCount by derivedStateOf { (maxWidth / 120.dp).floor() } val itemPerRowCount = remember(maxWidth) {
val items by derivedStateOf { state.pagePreviews.chunked(itemPerRowCount) } (maxWidth / 120.dp).floor()
}
val items = remember(state.pagePreviews, itemPerRowCount) {
state.pagePreviews.chunked(itemPerRowCount)
}
val lazyListState = key(state.page) { val lazyListState = key(state.page) {
rememberLazyListState() rememberLazyListState()
} }
@ -79,20 +85,20 @@ fun PagePreviewScreen(
state = lazyListState, state = lazyListState,
modifier = Modifier, modifier = Modifier,
contentPadding = paddingValues + topPaddingValues, contentPadding = paddingValues + topPaddingValues,
verticalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
items.forEach { items(items) {
item { Row(
Row( modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp),
modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically,
verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(16.dp),
) { ) {
it.forEach { page -> it.forEach { page ->
PagePreview( PagePreview(
modifier = Modifier.weight(1F), modifier = Modifier.weight(1F),
page = page, page = page,
onOpenPage = onOpenPage, onOpenPage = onOpenPage,
) )
}
} }
} }
} }