Forces aspect ratio while obeying maxWidth and Height of the frame.

This commit is contained in:
Vitor Pamplona
2023-05-14 22:22:53 -04:00
parent 32913915ce
commit db6ebe609c
@@ -17,9 +17,11 @@ import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
@@ -209,17 +211,21 @@ private fun LocalImageView(
mutableStateOf<AsyncImagePainter.State?>(null) mutableStateOf<AsyncImagePainter.State?>(null)
} }
val ratio = remember { BoxWithConstraints(contentAlignment = Alignment.Center) {
aspectRatio(content.dim) val myModifier = remember {
mainImageModifier
.widthIn(max = maxWidth)
.heightIn(max = maxHeight)
.run {
aspectRatio(content.dim)?.let { ratio ->
this.aspectRatio(ratio, false)
} ?: this
}
} }
BoxWithConstraints(contentAlignment = Alignment.Center) { val contentScale = remember {
val myModifier = mainImageModifier.also { if (maxHeight.isFinite) ContentScale.Fit else ContentScale.FillWidth
if (ratio != null) {
it.aspectRatio(ratio, maxHeight.isFinite)
} }
}
val contentScale = if (maxHeight.isFinite) ContentScale.Inside else ContentScale.FillWidth
if (content.localFile != null && content.localFile.exists()) { if (content.localFile != null && content.localFile.exists()) {
AsyncImage( AsyncImage(
@@ -281,14 +287,18 @@ private fun UrlImageView(
BoxWithConstraints(contentAlignment = Alignment.Center) { BoxWithConstraints(contentAlignment = Alignment.Center) {
val myModifier = remember { val myModifier = remember {
mainImageModifier.run { mainImageModifier
.widthIn(max = maxWidth)
.heightIn(max = maxHeight)
.run {
aspectRatio(content.dim)?.let { ratio -> aspectRatio(content.dim)?.let { ratio ->
this.aspectRatio(ratio, maxHeight.isFinite) this.aspectRatio(ratio, false)
} ?: this } ?: this
} }
} }
val contentScale = remember { val contentScale = remember {
if (maxHeight.isFinite) ContentScale.Inside else ContentScale.FillWidth if (maxHeight.isFinite) ContentScale.Fit else ContentScale.FillWidth
} }
AsyncImage( AsyncImage(