diff --git a/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerScreen.kt b/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerScreen.kt index cdcac28..6060af0 100644 --- a/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerScreen.kt +++ b/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerScreen.kt @@ -1,5 +1,6 @@ package app.dapk.st.messenger +import android.content.res.Configuration import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -20,11 +21,10 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.IntSize -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp +import androidx.compose.ui.unit.* import app.dapk.st.core.Lce import app.dapk.st.core.LifecycleEffect import app.dapk.st.core.StartObserving @@ -237,11 +237,9 @@ private fun MessageImage(content: BubbleContent) { ) } - val width = with(LocalDensity.current) { content.message.imageMeta.width.toDp() } - val height = with(LocalDensity.current) { content.message.imageMeta.height.toDp() } Spacer(modifier = Modifier.height(4.dp)) Image( - modifier = Modifier.size(width, height), + modifier = Modifier.size(content.message.imageMeta.scaleMeta(LocalDensity.current, LocalConfiguration.current)), painter = rememberImagePainter( data = content.message, builder = { fetcher(DecryptingFetcher()) } @@ -264,8 +262,25 @@ private fun MessageImage(content: BubbleContent) { } } } +} + +private fun RoomEvent.Image.ImageMeta.scaleMeta(density: Density, configuration: Configuration): DpSize { + return with(density) { + val scaler = minOf( + this@scaleMeta.height.scalerFor(configuration.screenHeightDp.dp.toPx() * 0.5f), + this@scaleMeta.width.scalerFor(configuration.screenWidthDp.dp.toPx() * 0.6f) + ) + + DpSize( + width = (this@scaleMeta.width * scaler).toDp(), + height = (this@scaleMeta.height * scaler).toDp(), + ) + } +} +private fun Int.scalerFor(max: Float): Float { + return max / this } private val selfBackgroundShape = RoundedCornerShape(12.dp, 0.dp, 12.dp, 12.dp)