Round the corners of page previews
This commit is contained in:
parent
9870c23a5b
commit
5afc33becb
@ -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,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user