diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e985b9bef..b4805e56d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -200,6 +200,7 @@ dependencies { implementation("com.github.tachiyomiorg:DirectionalViewPager:1.0.0") // Dead Dependency // https://github.com/google/accompanist/releases implementation("com.google.accompanist:accompanist-themeadapter-material3:0.28.0") + implementation("com.google.accompanist:accompanist-drawablepainter:0.28.0") implementation("com.google.android.material:material:1.8.0") // https://square.github.io/okhttp/changelogs/changelog/ 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 50c48df91..2807586c9 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 @@ -12,6 +12,8 @@ import androidx.compose.ui.platform.LocalContext import coil.compose.AsyncImage import coil.compose.AsyncImagePainter import coil.request.ImageRequest +import com.google.accompanist.drawablepainter.DrawablePainter +import com.hippo.drawable.PreciselyClipDrawable import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.coil.ehUrl @@ -45,10 +47,30 @@ fun EhAsyncPreview( model = requestOf(model.imageUrl), contentDescription = "", modifier = modifier, + transform = { + if (it is AsyncImagePainter.State.Success) { + model.run { + if (offsetX == Int.MIN_VALUE) it + else it.copy( + painter = DrawablePainter( + PreciselyClipDrawable( + it.result.drawable, + offsetX, + offsetY, + clipWidth, + clipHeight + ) + ) + ) + } + } else { + it + } + }, onState = { if (it is AsyncImagePainter.State.Success) { it.result.drawable.run { - if ((intrinsicWidth.toFloat() / intrinsicHeight) in 0.5..0.8) { + if ((intrinsicWidth.toFloat() / intrinsicHeight) in 0.5..0.8 && model.offsetX == Int.MIN_VALUE) { if (contentScale == ContentScale.Fit) contentScale = ContentScale.Crop } }