Image: play with a ZoomableBox

This commit is contained in:
ganfra 2023-05-02 21:13:21 +02:00
parent ed10fc6651
commit 28770afac0
2 changed files with 122 additions and 3 deletions

View file

@ -17,16 +17,28 @@
package io.element.android.features.messages.impl.media.viewer
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.calculatePan
import androidx.compose.foundation.gestures.calculateZoom
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.features.messages.impl.media.viewer.model.MediaContentUiModel
import io.element.android.libraries.designsystem.components.ZoomableBox
import io.element.android.libraries.designsystem.components.blurhash.BlurHashAsyncImage
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
@ -54,14 +66,14 @@ private fun MediaImageViewer(
image: MediaContentUiModel.Image,
modifier: Modifier = Modifier,
) {
Box(
ZoomableBox(
modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
BlurHashAsyncImage(
blurHash = image.blurhash,
modifier = Modifier.fillMaxSize().zoomable(),
model = image.mediaRequestData,
contentScale = ContentScale.Crop,
contentScale = ContentScale.Fit,
)
}
}
@ -79,6 +91,7 @@ private fun MediaVideoViewer(
}
}
@Preview
@Composable
fun MediaViewerViewLightPreview(@PreviewParameter(MediaViewerStateProvider::class) state: MediaViewerState) =