diff --git a/coil-compose-base/src/androidTest/java/coil/compose/AsyncImageTest.kt b/coil-compose-base/src/androidTest/java/coil/compose/AsyncImageTest.kt index dbab7931af..9be729d6e8 100644 --- a/coil-compose-base/src/androidTest/java/coil/compose/AsyncImageTest.kt +++ b/coil-compose-base/src/androidTest/java/coil/compose/AsyncImageTest.kt @@ -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) { diff --git a/coil-compose-base/src/main/java/coil/compose/AsyncImage.kt b/coil-compose-base/src/main/java/coil/compose/AsyncImage.kt index e73aef3c4a..ccbb47aad3 100644 --- a/coil-compose-base/src/main/java/coil/compose/AsyncImage.kt +++ b/coil-compose-base/src/main/java/coil/compose/AsyncImage.kt @@ -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 ) @@ -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 } diff --git a/coil-compose-base/src/main/java/coil/compose/SubcomposeAsyncImage.kt b/coil-compose-base/src/main/java/coil/compose/SubcomposeAsyncImage.kt index fe96cb1909..ecdd6ce3b1 100644 --- a/coil-compose-base/src/main/java/coil/compose/SubcomposeAsyncImage.kt +++ b/coil-compose-base/src/main/java/coil/compose/SubcomposeAsyncImage.kt @@ -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 )