@@ -8,7 +8,6 @@ import androidx.activity.SystemBarStyle
88import androidx.activity.compose.setContent
99import androidx.activity.enableEdgeToEdge
1010import androidx.compose.foundation.background
11- import androidx.compose.foundation.gestures.detectTapGestures
1211import androidx.compose.foundation.layout.fillMaxSize
1312import androidx.compose.foundation.layout.padding
1413import androidx.compose.runtime.Composable
@@ -18,14 +17,17 @@ import androidx.compose.runtime.mutableStateOf
1817import androidx.compose.runtime.saveable.rememberSaveable
1918import androidx.compose.runtime.setValue
2019import androidx.compose.ui.Modifier
21- import androidx.compose.ui.input.pointer.pointerInput
20+ import androidx.compose.ui.geometry.Size
2221import androidx.compose.ui.platform.LocalContext
22+ import androidx.compose.ui.platform.LocalDensity
2323import androidx.compose.ui.unit.dp
2424import coil3.compose.AsyncImage
2525import coil3.request.ImageRequest
2626import coil3.request.crossfade
27- import net.engawapg.lib.zoomable.rememberZoomState
28- import net.engawapg.lib.zoomable.zoomable
27+ import me.saket.telephoto.zoomable.ZoomSpec
28+ import me.saket.telephoto.zoomable.ZoomableContentLocation
29+ import me.saket.telephoto.zoomable.rememberZoomableState
30+ import me.saket.telephoto.zoomable.zoomable
2931import android.graphics.Color as AndroidColor
3032import androidx.compose.ui.graphics.Color.Companion as ComposeColor
3133
@@ -79,19 +81,33 @@ private fun ImagePreview(
7981 onDismiss : () -> Unit ,
8082 modifier : Modifier = Modifier ,
8183) {
84+ val zoomableState = rememberZoomableState(
85+ zoomSpec = ZoomSpec (maxZoomFactor = 5f ),
86+ )
87+ val density = LocalDensity .current
88+ val padding = 16 .dp
8289 AsyncImage (
8390 model = ImageRequest .Builder (LocalContext .current)
8491 .data(data)
8592 .crossfade(true )
93+ .listener { _, result ->
94+ val image = result.image
95+ val paddingPx = density.run { padding.toPx() } * 2f
96+ zoomableState.setContentLocation(
97+ ZoomableContentLocation .scaledInsideAndCenterAligned(
98+ Size (
99+ width = image.width.toFloat() + paddingPx,
100+ height = image.height.toFloat() + paddingPx
101+ )
102+ )
103+ )
104+ }
86105 .build(),
87106 contentDescription = null ,
88107 modifier = modifier
89108 .fillMaxSize()
90109 .background(ComposeColor .Black .copy(alpha = 0.5f ))
91- .pointerInput(onDismiss) {
92- detectTapGestures(onTap = { onDismiss() })
93- }
94- .padding(16 .dp)
95- .zoomable(zoomState = rememberZoomState()),
110+ .zoomable(state = zoomableState, onClick = { onDismiss() })
111+ .padding(padding),
96112 )
97113}
0 commit comments