From c883710a2d8566dc2c2f73d9c0e4ce9314d312c8 Mon Sep 17 00:00:00 2001 From: nvllz Date: Fri, 19 Jan 2024 03:07:05 +0100 Subject: [PATCH] image zooming feature --- app/build.gradle | 2 ++ .../reader/ui/component/reader/HtmlToComposable.kt | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 877c15dda..d1a223627 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -191,4 +191,6 @@ dependencies { androidTestImplementation "androidx.test.ext:junit:1.1.3" androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0" + // https://github.com/usuiat/Zoomable + implementation "net.engawapg.lib:zoomable:1.5.3" } diff --git a/app/src/main/java/me/ash/reader/ui/component/reader/HtmlToComposable.kt b/app/src/main/java/me/ash/reader/ui/component/reader/HtmlToComposable.kt index 95964a897..8466c3013 100644 --- a/app/src/main/java/me/ash/reader/ui/component/reader/HtmlToComposable.kt +++ b/app/src/main/java/me/ash/reader/ui/component/reader/HtmlToComposable.kt @@ -62,6 +62,9 @@ import org.jsoup.nodes.TextNode import java.io.InputStream import kotlin.math.abs import kotlin.math.roundToInt +import net.engawapg.lib.zoomable.rememberZoomState +import net.engawapg.lib.zoomable.toggleScale +import net.engawapg.lib.zoomable.zoomable fun LazyListScope.htmlFormattedText( inputStream: InputStream, @@ -497,13 +500,21 @@ private fun TextComposer.appendTextChildren( // } ) { val imageSize = maxImageSize() + val zoomState = rememberZoomState() + val targetScale = 1.75f RYAsyncImage( modifier = Modifier .align(Alignment.Center) .fillMaxWidth() .padding(horizontal = imageHorizontalPadding().dp) .clip(imageShape()) - .clickable { }, + .clickable { } + .zoomable( + zoomState = zoomState, + onDoubleTap = { + position -> zoomState.toggleScale(targetScale, position) + } + ), data = imageCandidates.getBestImageForMaxSize( pixelDensity = pixelDensity(), maxSize = imageSize,