From e8ad2f2185ca46214bd2c936b66541c14d0dba72 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 12 May 2023 12:15:38 +0800 Subject: [PATCH] Conditionally crop thumb, Resolve #1047 --- .../hippo/ehviewer/ui/scene/DownloadsScene.kt | 6 ++--- .../hippo/ehviewer/ui/widget/EhAsyncThumb.kt | 23 +++++++++++++++++++ .../ui/widget/GalleryDetailWidgets.kt | 4 +--- .../ehviewer/ui/widget/GalleryInfoCard.kt | 3 +-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 31ef2b7d4..99ea16d9c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -32,7 +32,6 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.height import androidx.compose.material3.Card import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat import androidx.core.view.GravityCompat @@ -67,7 +66,7 @@ import com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener import com.hippo.ehviewer.download.DownloadService import com.hippo.ehviewer.download.DownloadService.Companion.clear import com.hippo.ehviewer.spider.SpiderDen -import com.hippo.ehviewer.ui.widget.EhAsyncThumb +import com.hippo.ehviewer.ui.widget.EhAsyncCropThumb import com.hippo.ehviewer.ui.widget.setMD3Content import com.hippo.unifile.UniFile import com.hippo.view.ViewTransition @@ -865,9 +864,8 @@ class DownloadsScene : Card( onClick = ::onClick.partially1(binding.thumb), ) { - EhAsyncThumb( + EhAsyncCropThumb( model = info.thumb, - contentScale = ContentScale.Crop, modifier = Modifier .height(height) .aspectRatio(0.6666667F), diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt index d362a0ca8..75486755d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/EhAsyncThumb.kt @@ -52,6 +52,29 @@ fun EhAsyncThumb( contentScale = contentScale, ) +@Composable +fun EhAsyncCropThumb( + model: String?, + modifier: Modifier = Modifier, +) { + var contentScale by remember { mutableStateOf(ContentScale.Fit) } + AsyncImage( + model = requestOf(model), + contentDescription = null, + modifier = modifier, + onState = { + if (it is AsyncImagePainter.State.Success) { + it.result.drawable.run { + if (intrinsicWidth.toFloat() / intrinsicHeight in 0.5..0.8) { + if (contentScale == ContentScale.Fit) contentScale = ContentScale.Crop + } + } + } + }, + contentScale = contentScale, + ) +} + /** * Show a part of the original drawable, non-animated only implementation. */ diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryDetailWidgets.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryDetailWidgets.kt index 64cec5a91..e15d1dad6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryDetailWidgets.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryDetailWidgets.kt @@ -19,7 +19,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource @@ -128,9 +127,8 @@ fun GalleryDetailHeaderCard( ) { Row { Card { - EhAsyncThumb( + EhAsyncCropThumb( model = galleryInfo.thumb, - contentScale = ContentScale.Crop, modifier = Modifier .height(dimensionResource(id = R.dimen.gallery_detail_thumb_height)) .width(dimensionResource(id = R.dimen.gallery_detail_thumb_width)), diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt index cf364da3d..d0283c95d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt @@ -53,9 +53,8 @@ fun GalleryInfoListItem( ), ) { Card { - EhAsyncThumb( + EhAsyncCropThumb( model = info.thumb, - contentScale = ContentScale.Crop, modifier = modifier.aspectRatio(0.6666667F), ) }