Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,13 @@ jobs:
timeout-minutes: 5
with:
cache-overwrite-existing: true
cache-cleanup: true

- 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
Expand All @@ -72,7 +71,6 @@ jobs:
timeout-minutes: 5
with:
cache-overwrite-existing: true
cache-cleanup: true

- name: Unit tests
run: ./gradlew iosSimulatorArm64Test macosArm64Test
Expand All @@ -96,7 +94,6 @@ jobs:
timeout-minutes: 5
with:
cache-overwrite-existing: true
cache-cleanup: true

# API 30+ emulators only have x86_64 system images.
- name: Get AVD info
Expand Down Expand Up @@ -134,7 +131,6 @@ jobs:
timeout-minutes: 5
with:
cache-overwrite-existing: true
cache-cleanup: true

- name: Build Compose and View samples
# Place resource restrictions on this task so it doesn't crash.
Expand All @@ -144,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
Expand All @@ -157,14 +153,13 @@ jobs:
timeout-minutes: 5
with:
cache-overwrite-existing: true
cache-cleanup: true

- 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
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]
Expand Down
2 changes: 0 additions & 2 deletions buildSrc/src/main/kotlin/coil3/multiplatform.kt
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,9 @@ fun Project.addAllMultiplatformTargets(
}
}

iosX64()
iosArm64()
iosSimulatorArm64()

macosX64()
macosArm64()

if (enableNativeLinux) {
Expand Down
2 changes: 1 addition & 1 deletion coil-compose-core/api/coil-compose-core.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
2 changes: 1 addition & 1 deletion coil-compose/api/coil-compose.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions coil-core/api/coil-core.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
8 changes: 1 addition & 7 deletions coil-core/src/nonAndroidMain/kotlin/coil3/ColorImage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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 {
Expand All @@ -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)
}
Expand Down
15 changes: 12 additions & 3 deletions coil-core/src/nonAndroidMain/kotlin/coil3/util/utils.nonAndroid.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -56,8 +56,17 @@ internal fun Bitmap.Companion.makeFromImage(
Canvas(bitmap).use { canvas ->
canvas.drawImageRect(
image = image,
src = Rect.makeWH(srcWidth.toFloat(), srcHeight.toFloat()),
dst = Rect.makeWH(outWidth.toFloat(), outHeight.toFloat()),
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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion coil-network-core/api/coil-network-core.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion coil-network-ktor2/api/coil-network-ktor2.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion coil-network-ktor3/api/coil-network-ktor3.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion coil-svg/api/coil-svg.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion coil-test/api/coil-test.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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, " +
Expand All @@ -21,18 +20,13 @@ 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 {
Paint()
.apply { color = [email protected] }
.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)
}
}
2 changes: 1 addition & 1 deletion coil/api/coil.klib.api
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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-beta02"
jetbrains-compose-material3 = "1.9.0"
jetbrains-compose-material-icons-extended = "1.7.3"
kotlin = "2.3.20"
Expand All @@ -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.5"

[plugins]
baselineProfile = { id = "androidx.baselineprofile", version.ref = "androidx-benchmark" }
Expand Down
Original file line number Diff line number Diff line change
@@ -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.runDesktopComposeUiTest
import coil3.Image
import coil3.ImageLoader
import coil3.compose.AsyncImage
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -37,7 +37,7 @@ class RoborazziComposeTestJvm {
.components { add(engine) }
.build()

runDesktopComposeUiTest {
runComposeUiTest {
setContent {
AsyncImage(
model = url,
Expand Down Expand Up @@ -65,7 +65,7 @@ class RoborazziComposeTestJvm {
.components { add(engine) }
.build()

runDesktopComposeUiTest {
runComposeUiTest {
setContent {
Image(
painter = rememberAsyncImagePainter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -23,8 +23,17 @@ actual fun decodeBitmapResource(
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()),
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
Expand Down
1 change: 0 additions & 1 deletion samples/compose/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ kotlin {
}

arrayOf(
iosX64(),
iosArm64(),
iosSimulatorArm64(),
).forEach { target ->
Expand Down