Skip to content

Commit

Permalink
Load images with Size.ORIGINAL if ContentScale is None. (#1249)
Browse files Browse the repository at this point in the history
* Load images with Size.ORIGINAL if ContentScale is None.

* Docs.
  • Loading branch information
colinrtwhite committed Apr 26, 2022
1 parent b6bfc46 commit a9562d0
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 6 deletions.
Expand Up @@ -658,6 +658,25 @@ class AsyncImageTest {
.assertIsSimilarTo(R.drawable.sample, threshold = 0.85)
}

/** Regression test: https://github.com/coil-kt/coil/issues/1217 */
@Test
fun noneContentScaleShouldLoadAtOriginalSize() {
composeTestRule.setContent {
AsyncImage(
model = server.url("/image"),
contentDescription = null,
imageLoader = imageLoader,
modifier = Modifier.width(30.dp),
contentScale = ContentScale.None
)
}

waitForRequestComplete()

// Equal to the source dimensions of 'sample.jpg'.
assertSampleLoadedBitmapSize(1024.0, 1326.0)
}

private fun waitForRequestComplete(finishedRequests: Int = 1) {
composeTestRule.waitForIdle()
composeTestRule.waitUntil(10_000) {
Expand Down
13 changes: 8 additions & 5 deletions coil-compose-base/src/main/java/coil/compose/AsyncImage.kt
Expand Up @@ -128,7 +128,7 @@ fun AsyncImage(
filterQuality: FilterQuality = DefaultFilterQuality,
) {
// Create and execute the image request.
val request = updateRequest(requestOf(model))
val request = updateRequest(requestOf(model), contentScale)
val painter = rememberAsyncImagePainter(
request, imageLoader, transform, onState, contentScale, filterQuality
)
Expand Down Expand Up @@ -179,11 +179,14 @@ internal fun Content(
)

@Composable
internal fun updateRequest(request: ImageRequest): ImageRequest {
internal fun updateRequest(request: ImageRequest, contentScale: ContentScale): ImageRequest {
return if (request.defined.sizeResolver == null) {
request.newBuilder()
.size(remember { ConstraintsSizeResolver() })
.build()
val sizeResolver = if (contentScale == ContentScale.None) {
SizeResolver(CoilSize.ORIGINAL)
} else {
remember { ConstraintsSizeResolver() }
}
request.newBuilder().size(sizeResolver).build()
} else {
request
}
Expand Down
Expand Up @@ -117,7 +117,7 @@ fun SubcomposeAsyncImage(
content: @Composable SubcomposeAsyncImageScope.() -> Unit,
) {
// Create and execute the image request.
val request = updateRequest(requestOf(model))
val request = updateRequest(requestOf(model), contentScale)
val painter = rememberAsyncImagePainter(
request, imageLoader, transform, onState, contentScale, filterQuality
)
Expand Down

0 comments on commit a9562d0

Please sign in to comment.