From 778a4c6bef7537272a7f0f29139f962e4c69af9f Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 9 Apr 2026 18:13:48 -0400 Subject: [PATCH 01/10] Update Compose to 1.11.0-beta01. Remove ios/mac x64 targets. --- buildSrc/src/main/kotlin/coil3/multiplatform.kt | 2 -- coil-compose-core/api/coil-compose-core.klib.api | 2 +- .../kotlin/coil3/compose/ImagePainter.nonAndroid.kt | 4 ++-- coil-compose/api/coil-compose.klib.api | 2 +- coil-core/api/coil-core.klib.api | 4 ++-- .../api/coil-network-cache-control.klib.api | 2 +- coil-network-core/api/coil-network-core.klib.api | 2 +- coil-network-ktor2/api/coil-network-ktor2.klib.api | 2 +- coil-network-ktor3/api/coil-network-ktor3.klib.api | 2 +- coil-svg/api/coil-svg.klib.api | 2 +- coil-test/api/coil-test.klib.api | 2 +- coil/api/coil.klib.api | 2 +- gradle/libs.versions.toml | 4 ++-- samples/compose/build.gradle.kts | 1 - 14 files changed, 15 insertions(+), 18 deletions(-) diff --git a/buildSrc/src/main/kotlin/coil3/multiplatform.kt b/buildSrc/src/main/kotlin/coil3/multiplatform.kt index cd0c38b101..c572faca38 100644 --- a/buildSrc/src/main/kotlin/coil3/multiplatform.kt +++ b/buildSrc/src/main/kotlin/coil3/multiplatform.kt @@ -87,11 +87,9 @@ fun Project.addAllMultiplatformTargets( } } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() if (enableNativeLinux) { diff --git a/coil-compose-core/api/coil-compose-core.klib.api b/coil-compose-core/api/coil-compose-core.klib.api index 595021c9dc..ce86cd8db2 100644 --- a/coil-compose-core/api/coil-compose-core.klib.api +++ b/coil-compose-core/api/coil-compose-core.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-compose-core/src/nonAndroidMain/kotlin/coil3/compose/ImagePainter.nonAndroid.kt b/coil-compose-core/src/nonAndroidMain/kotlin/coil3/compose/ImagePainter.nonAndroid.kt index 7c217c5647..2c5de0aa09 100644 --- a/coil-compose-core/src/nonAndroidMain/kotlin/coil3/compose/ImagePainter.nonAndroid.kt +++ b/coil-compose-core/src/nonAndroidMain/kotlin/coil3/compose/ImagePainter.nonAndroid.kt @@ -3,9 +3,9 @@ package coil3.compose import androidx.compose.ui.graphics.Canvas import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.asComposeImageBitmap -import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.skiaCanvas import coil3.BitmapImage import coil3.Image import coil3.PlatformContext @@ -22,4 +22,4 @@ actual fun Image.asPainter( else -> ImagePainter(this) } -internal actual val Canvas.nativeCanvas get() = nativeCanvas +internal actual val Canvas.nativeCanvas get() = skiaCanvas diff --git a/coil-compose/api/coil-compose.klib.api b/coil-compose/api/coil-compose.klib.api index b4a535b9d5..31f3b021f0 100644 --- a/coil-compose/api/coil-compose.klib.api +++ b/coil-compose/api/coil-compose.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-core/api/coil-core.klib.api b/coil-core/api/coil-core.klib.api index df788e4977..112698559f 100644 --- a/coil-core/api/coil-core.klib.api +++ b/coil-core/api/coil-core.klib.api @@ -1,6 +1,6 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] -// Alias: native => [iosArm64, iosSimulatorArm64, iosX64, linuxArm64, linuxX64, macosArm64, macosX64] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] +// Alias: native => [iosArm64, iosSimulatorArm64, linuxArm64, linuxX64, macosArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-network-cache-control/api/coil-network-cache-control.klib.api b/coil-network-cache-control/api/coil-network-cache-control.klib.api index 41a23afae3..931cabae87 100644 --- a/coil-network-cache-control/api/coil-network-cache-control.klib.api +++ b/coil-network-cache-control/api/coil-network-cache-control.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-network-core/api/coil-network-core.klib.api b/coil-network-core/api/coil-network-core.klib.api index 68a8eac2cf..bba2c61483 100644 --- a/coil-network-core/api/coil-network-core.klib.api +++ b/coil-network-core/api/coil-network-core.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-network-ktor2/api/coil-network-ktor2.klib.api b/coil-network-ktor2/api/coil-network-ktor2.klib.api index d5dde2b393..25948562d3 100644 --- a/coil-network-ktor2/api/coil-network-ktor2.klib.api +++ b/coil-network-ktor2/api/coil-network-ktor2.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-network-ktor3/api/coil-network-ktor3.klib.api b/coil-network-ktor3/api/coil-network-ktor3.klib.api index fdd550cae3..f0d3eff98d 100644 --- a/coil-network-ktor3/api/coil-network-ktor3.klib.api +++ b/coil-network-ktor3/api/coil-network-ktor3.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-svg/api/coil-svg.klib.api b/coil-svg/api/coil-svg.klib.api index 25e7363f63..3982a87859 100644 --- a/coil-svg/api/coil-svg.klib.api +++ b/coil-svg/api/coil-svg.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil-test/api/coil-test.klib.api b/coil-test/api/coil-test.klib.api index f212490609..ee6b63b091 100644 --- a/coil-test/api/coil-test.klib.api +++ b/coil-test/api/coil-test.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/coil/api/coil.klib.api b/coil/api/coil.klib.api index d91fcfd04a..827244b526 100644 --- a/coil/api/coil.klib.api +++ b/coil/api/coil.klib.api @@ -1,5 +1,5 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64, js, linuxArm64, linuxX64, macosArm64, wasmJs] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddcd3ca539..29f3374731 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ androidx-tracing-perfetto = "1.0.1" atomicfu = "0.32.1" coroutines = "1.10.2" dokka = "2.2.0" -jetbrains-compose = "1.10.3" +jetbrains-compose = "1.11.0-beta01" jetbrains-compose-material3 = "1.9.0" jetbrains-compose-material-icons-extended = "1.7.3" kotlin = "2.3.20" @@ -19,7 +19,7 @@ okhttp = "4.12.0" okio = "3.17.0" paparazzi = "2.0.0-alpha04" roborazzi = "1.59.0" -skiko = "0.9.37.4" +skiko = "0.144.4" [plugins] baselineProfile = { id = "androidx.baselineprofile", version.ref = "androidx-benchmark" } diff --git a/samples/compose/build.gradle.kts b/samples/compose/build.gradle.kts index 88af491fda..1e1f9ba7f2 100644 --- a/samples/compose/build.gradle.kts +++ b/samples/compose/build.gradle.kts @@ -62,7 +62,6 @@ kotlin { } arrayOf( - iosX64(), iosArm64(), iosSimulatorArm64(), ).forEach { target -> From 982c89a5e20f419f5d887dd33db95fe15a9434e8 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 01:07:54 -0400 Subject: [PATCH 02/10] Fix deprecated API. --- .../coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt index ead7847b41..d0038b8de8 100644 --- a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt +++ b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt @@ -1,7 +1,7 @@ package coil3.test.composeuimultiplatform import androidx.compose.ui.test.ExperimentalTestApi -import androidx.compose.ui.test.runComposeUiTest +import androidx.compose.ui.test.v2.runComposeUiTest import coil3.Image import coil3.ImageLoader import coil3.compose.AsyncImage From f64862d0894ec16c62a631ed5a151fedc4d765c2 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 02:13:30 -0400 Subject: [PATCH 03/10] Fix Compose 1.11 CI and desktop UI tests --- .github/workflows/ci.yml | 16 ++++++++-------- .../ComposeUiResourcesTest.kt | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bb2f8ee0b..1145fca298 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,14 +52,14 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: true + cache-cleanup: on-success - name: Unit tests run: ./test.sh --skip-checks --skip-instrumentation-tests unit-tests-macos: name: Unit tests (macOS) - runs-on: macos-latest + runs-on: macos-26 timeout-minutes: 120 steps: - uses: actions/checkout@v6 @@ -72,7 +72,7 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: true + cache-cleanup: on-success - name: Unit tests run: ./gradlew iosSimulatorArm64Test macosArm64Test @@ -96,7 +96,7 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: true + cache-cleanup: on-success # API 30+ emulators only have x86_64 system images. - name: Get AVD info @@ -134,7 +134,7 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: true + cache-cleanup: on-success - name: Build Compose and View samples # Place resource restrictions on this task so it doesn't crash. @@ -144,7 +144,7 @@ jobs: build-samples-macos: name: Build samples (macOS) - runs-on: macos-latest + runs-on: macos-26 timeout-minutes: 60 steps: - uses: actions/checkout@v6 @@ -157,10 +157,10 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: true + cache-cleanup: on-success - name: Build iOS sample - run: xcodebuild -project samples/compose/iosApp/iosApp.xcodeproj -scheme iosApp -destination 'generic/platform=iOS Simulator' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO + run: xcodebuild -project samples/compose/iosApp/iosApp.xcodeproj -scheme iosApp -destination 'generic/platform=iOS Simulator' ARCHS=arm64 CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO deploy-snapshot: name: Deploy snapshot diff --git a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt index d0038b8de8..0df9c86937 100644 --- a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt +++ b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt @@ -1,7 +1,7 @@ package coil3.test.composeuimultiplatform import androidx.compose.ui.test.ExperimentalTestApi -import androidx.compose.ui.test.v2.runComposeUiTest +import androidx.compose.ui.test.runDesktopComposeUiTest import coil3.Image import coil3.ImageLoader import coil3.compose.AsyncImage @@ -36,7 +36,7 @@ class ComposeUiResourcesTest { private fun testComposeUiResource( uri: String, assert: Image.() -> Unit, - ) = runComposeUiTest { + ) = runDesktopComposeUiTest { val imageLoader = ImageLoader(context) val request = ImageRequest.Builder(context) .data(uri) From c7a0efbd3104a7834708b4ebd5f8d51072fdfe87 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 02:39:08 -0400 Subject: [PATCH 04/10] Adjust CI workflow defaults --- .github/workflows/ci.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1145fca298..1441afe261 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,14 +52,13 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: on-success - name: Unit tests run: ./test.sh --skip-checks --skip-instrumentation-tests unit-tests-macos: name: Unit tests (macOS) - runs-on: macos-26 + runs-on: macos-latest timeout-minutes: 120 steps: - uses: actions/checkout@v6 @@ -72,7 +71,6 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: on-success - name: Unit tests run: ./gradlew iosSimulatorArm64Test macosArm64Test @@ -96,7 +94,6 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: on-success # API 30+ emulators only have x86_64 system images. - name: Get AVD info @@ -134,7 +131,6 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: on-success - name: Build Compose and View samples # Place resource restrictions on this task so it doesn't crash. @@ -144,7 +140,7 @@ jobs: build-samples-macos: name: Build samples (macOS) - runs-on: macos-26 + runs-on: macos-latest timeout-minutes: 60 steps: - uses: actions/checkout@v6 @@ -157,7 +153,6 @@ jobs: timeout-minutes: 5 with: cache-overwrite-existing: true - cache-cleanup: on-success - name: Build iOS sample run: xcodebuild -project samples/compose/iosApp/iosApp.xcodeproj -scheme iosApp -destination 'generic/platform=iOS Simulator' ARCHS=arm64 CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO From 14f8b444fda1710f670affe997ff60a94f9a4825 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 15:08:36 -0400 Subject: [PATCH 05/10] Optimize Skiko rect usage and fix macOS CI --- .github/workflows/ci.yml | 4 ++-- .../nonAndroidMain/kotlin/coil3/ColorImage.kt | 8 +------- .../kotlin/coil3/util/utils.nonAndroid.kt | 17 +++++++++++++---- .../kotlin/coil3/test/FakeImage.nonAndroid.kt | 8 +------- .../kotlin/coil3/test/utils/utils.jvm.kt | 17 +++++++++++++---- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1441afe261..11d6ae1fcd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ jobs: unit-tests-macos: name: Unit tests (macOS) - runs-on: macos-latest + runs-on: macos-26 timeout-minutes: 120 steps: - uses: actions/checkout@v6 @@ -140,7 +140,7 @@ jobs: build-samples-macos: name: Build samples (macOS) - runs-on: macos-latest + runs-on: macos-26 timeout-minutes: 60 steps: - uses: actions/checkout@v6 diff --git a/coil-core/src/nonAndroidMain/kotlin/coil3/ColorImage.kt b/coil-core/src/nonAndroidMain/kotlin/coil3/ColorImage.kt index 11148bcbc4..008e069ff4 100644 --- a/coil-core/src/nonAndroidMain/kotlin/coil3/ColorImage.kt +++ b/coil-core/src/nonAndroidMain/kotlin/coil3/ColorImage.kt @@ -2,7 +2,6 @@ package coil3 import coil3.annotation.Poko import org.jetbrains.skia.Paint -import org.jetbrains.skia.Rect @Poko actual class ColorImage actual constructor( @@ -13,7 +12,6 @@ actual class ColorImage actual constructor( actual override val shareable: Boolean, ) : Image { private var lazyPaint: Paint? = null - private var lazyRect: Rect? = null actual override fun draw(canvas: Canvas) { val paint = lazyPaint ?: run { @@ -22,11 +20,7 @@ actual class ColorImage actual constructor( .also { lazyPaint = it } } if (width >= 0 && height >= 0) { - val rect = lazyRect ?: run { - Rect.makeWH(width.toFloat(), height.toFloat()) - .also { lazyRect = it } - } - canvas.drawRect(rect, paint) + canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint) } else { canvas.drawPaint(paint) } diff --git a/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt b/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt index e45aa60525..64554048fd 100644 --- a/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt +++ b/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt @@ -9,7 +9,7 @@ import coil3.size.Precision import org.jetbrains.skia.Bitmap import org.jetbrains.skia.Canvas import org.jetbrains.skia.Image as SkiaImage -import org.jetbrains.skia.Rect +import org.jetbrains.skia.SamplingMode import org.jetbrains.skia.impl.use internal actual fun println( @@ -55,9 +55,18 @@ internal fun Bitmap.Companion.makeFromImage( bitmap.allocN32Pixels(outWidth, outHeight) Canvas(bitmap).use { canvas -> canvas.drawImageRect( - image = image, - src = Rect.makeWH(srcWidth.toFloat(), srcHeight.toFloat()), - dst = Rect.makeWH(outWidth.toFloat(), outHeight.toFloat()), + image, + 0f, + 0f, + srcWidth.toFloat(), + srcHeight.toFloat(), + 0f, + 0f, + outWidth.toFloat(), + outHeight.toFloat(), + SamplingMode.DEFAULT, + null, + false, ) } return bitmap diff --git a/coil-test/src/nonAndroidMain/kotlin/coil3/test/FakeImage.nonAndroid.kt b/coil-test/src/nonAndroidMain/kotlin/coil3/test/FakeImage.nonAndroid.kt index 37898c128f..9513317d9e 100644 --- a/coil-test/src/nonAndroidMain/kotlin/coil3/test/FakeImage.nonAndroid.kt +++ b/coil-test/src/nonAndroidMain/kotlin/coil3/test/FakeImage.nonAndroid.kt @@ -4,7 +4,6 @@ import coil3.Canvas import coil3.Image import coil3.annotation.Poko import org.jetbrains.skia.Paint -import org.jetbrains.skia.Rect @Deprecated( message = "ColorImage supports the same functionality, has `color` as the first argument, " + @@ -21,7 +20,6 @@ actual class FakeImage actual constructor( actual val color: Int, ) : Image { private var lazyPaint: Paint? = null - private var lazyRect: Rect? = null actual override fun draw(canvas: Canvas) { val paint = lazyPaint ?: run { @@ -29,10 +27,6 @@ actual class FakeImage actual constructor( .apply { color = this@FakeImage.color } .also { lazyPaint = it } } - val rect = lazyRect ?: run { - Rect.makeWH(width.toFloat(), height.toFloat()) - .also { lazyRect = it } - } - canvas.drawRect(rect, paint) + canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint) } } diff --git a/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt b/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt index 2d8372542a..b1903d90a7 100644 --- a/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt +++ b/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt @@ -6,7 +6,7 @@ import okio.buffer import org.jetbrains.skia.Bitmap import org.jetbrains.skia.Canvas import org.jetbrains.skia.Image -import org.jetbrains.skia.Rect +import org.jetbrains.skia.SamplingMode import org.jetbrains.skia.impl.use actual fun decodeBitmapResource( @@ -22,9 +22,18 @@ actual fun decodeBitmapResource( bitmap.allocN32Pixels(image.width, image.height) Canvas(bitmap).use { canvas -> canvas.drawImageRect( - image = image, - src = Rect.makeWH(image.width.toFloat(), image.height.toFloat()), - dst = Rect.makeWH(image.width.toFloat(), image.height.toFloat()), + image, + 0f, + 0f, + image.width.toFloat(), + image.height.toFloat(), + 0f, + 0f, + image.width.toFloat(), + image.height.toFloat(), + SamplingMode.DEFAULT, + null, + false, ) } return bitmap From 5ca6ff83955e41ee2eba75f63207fdd1dc7c841c Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 16:11:35 -0400 Subject: [PATCH 06/10] Update Compose to 1.11.0-beta02 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 29f3374731..ca047beda2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ androidx-tracing-perfetto = "1.0.1" atomicfu = "0.32.1" coroutines = "1.10.2" dokka = "2.2.0" -jetbrains-compose = "1.11.0-beta01" +jetbrains-compose = "1.11.0-beta02" jetbrains-compose-material3 = "1.9.0" jetbrains-compose-material-icons-extended = "1.7.3" kotlin = "2.3.20" @@ -19,7 +19,7 @@ okhttp = "4.12.0" okio = "3.17.0" paparazzi = "2.0.0-alpha04" roborazzi = "1.59.0" -skiko = "0.144.4" +skiko = "0.144.5" [plugins] baselineProfile = { id = "androidx.baselineprofile", version.ref = "androidx-benchmark" } From 1e9215aa241a1a958cf54b36e436887855b212d6 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 16:52:16 -0400 Subject: [PATCH 07/10] Use v2 desktop Compose UI test API --- .../coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt index 0df9c86937..fd21452c1b 100644 --- a/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt +++ b/internal/test-compose-ui-multiplatform/src/jvmTest/kotlin/coil3/test/composeuimultiplatform/ComposeUiResourcesTest.kt @@ -1,7 +1,7 @@ package coil3.test.composeuimultiplatform import androidx.compose.ui.test.ExperimentalTestApi -import androidx.compose.ui.test.runDesktopComposeUiTest +import androidx.compose.ui.test.v2.runDesktopComposeUiTest import coil3.Image import coil3.ImageLoader import coil3.compose.AsyncImage From ae8f1025d7ac57bf8128a1cc55000c01657d0ba5 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 10 Apr 2026 16:54:39 -0400 Subject: [PATCH 08/10] Use macos-26 everywhere. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11d6ae1fcd..5688e2bf6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,7 +159,7 @@ jobs: deploy-snapshot: name: Deploy snapshot - runs-on: macos-latest + runs-on: macos-26 timeout-minutes: 180 if: github.repository == 'coil-kt/coil' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/2.x') needs: [checks, unit-tests, unit-tests-macos, instrumentation-tests, build-samples, build-samples-macos] From e01b8ffe9e7257bbfcbfb7b46ed240b68bcafd30 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 13 Apr 2026 14:28:23 -0400 Subject: [PATCH 09/10] Fix deprecations. --- .../kotlin/coil3/roborazzi/RoborazziComposeTestJvm.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/test-roborazzi/src/jvmTest/kotlin/coil3/roborazzi/RoborazziComposeTestJvm.kt b/internal/test-roborazzi/src/jvmTest/kotlin/coil3/roborazzi/RoborazziComposeTestJvm.kt index 22a25413fb..703eb9ba60 100644 --- a/internal/test-roborazzi/src/jvmTest/kotlin/coil3/roborazzi/RoborazziComposeTestJvm.kt +++ b/internal/test-roborazzi/src/jvmTest/kotlin/coil3/roborazzi/RoborazziComposeTestJvm.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.test.ExperimentalTestApi import androidx.compose.ui.test.onRoot -import androidx.compose.ui.test.runDesktopComposeUiTest +import androidx.compose.ui.test.v2.runComposeUiTest import coil3.ColorImage import coil3.ImageLoader import coil3.PlatformContext @@ -37,7 +37,7 @@ class RoborazziComposeTestJvm { .components { add(engine) } .build() - runDesktopComposeUiTest { + runComposeUiTest { setContent { AsyncImage( model = url, @@ -65,7 +65,7 @@ class RoborazziComposeTestJvm { .components { add(engine) } .build() - runDesktopComposeUiTest { + runComposeUiTest { setContent { Image( painter = rememberAsyncImagePainter( From 5fdddf707e99b29b6a44dfad8a1fbb579b7e6b89 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 13 Apr 2026 17:45:26 -0400 Subject: [PATCH 10/10] Use named args. --- .../kotlin/coil3/util/utils.nonAndroid.kt | 24 +++++++++---------- .../kotlin/coil3/test/utils/utils.jvm.kt | 24 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt b/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt index 64554048fd..88e598db0c 100644 --- a/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt +++ b/coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt @@ -55,18 +55,18 @@ internal fun Bitmap.Companion.makeFromImage( bitmap.allocN32Pixels(outWidth, outHeight) Canvas(bitmap).use { canvas -> canvas.drawImageRect( - image, - 0f, - 0f, - srcWidth.toFloat(), - srcHeight.toFloat(), - 0f, - 0f, - outWidth.toFloat(), - outHeight.toFloat(), - SamplingMode.DEFAULT, - null, - false, + image = image, + srcLeft = 0f, + srcTop = 0f, + srcRight = srcWidth.toFloat(), + srcBottom = srcHeight.toFloat(), + dstLeft = 0f, + dstTop = 0f, + dstRight = outWidth.toFloat(), + dstBottom = outHeight.toFloat(), + samplingMode = SamplingMode.DEFAULT, + paint = null, + strict = false, ) } return bitmap diff --git a/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt b/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt index b1903d90a7..48d23ebc94 100644 --- a/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt +++ b/internal/test-utils/src/jvmMain/kotlin/coil3/test/utils/utils.jvm.kt @@ -22,18 +22,18 @@ actual fun decodeBitmapResource( bitmap.allocN32Pixels(image.width, image.height) Canvas(bitmap).use { canvas -> canvas.drawImageRect( - image, - 0f, - 0f, - image.width.toFloat(), - image.height.toFloat(), - 0f, - 0f, - image.width.toFloat(), - image.height.toFloat(), - SamplingMode.DEFAULT, - null, - false, + image = image, + srcLeft = 0f, + srcTop = 0f, + srcRight = image.width.toFloat(), + srcBottom = image.height.toFloat(), + dstLeft = 0f, + dstTop = 0f, + dstRight = image.width.toFloat(), + dstBottom = image.height.toFloat(), + samplingMode = SamplingMode.DEFAULT, + paint = null, + strict = false, ) } return bitmap