From 626915759ac8cc7dd770a05fa983c60f25bc7ea5 Mon Sep 17 00:00:00 2001 From: Kolchurin Konstantin Date: Wed, 2 Sep 2026 16:43:41 +0700 Subject: [PATCH] #885 fix usage of LocalSystemTheme on compose 1.12+ --- .../dev/icerock/moko/resources/compose/ImageResource.kt | 7 ++----- .../dev/icerock/moko/resources/compose/ImageResource.kt | 8 ++++---- .../dev/icerock/moko/resources/compose/ImageResource.kt | 7 ++----- .../dev/icerock/moko/resources/compose/ImageResource.kt | 8 ++++---- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/resources-compose/src/commonJsMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt b/resources-compose/src/commonJsMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt index df90ce28..074a505c 100644 --- a/resources-compose/src/commonJsMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt +++ b/resources-compose/src/commonJsMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt @@ -4,12 +4,10 @@ package dev.icerock.moko.resources.compose +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.InternalComposeUiApi -import androidx.compose.ui.LocalSystemTheme -import androidx.compose.ui.SystemTheme import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.painter.BitmapPainter @@ -25,10 +23,9 @@ import org.jetbrains.skia.Data import org.jetbrains.skia.Image import org.jetbrains.skia.svg.SVGDOM -@OptIn(InternalComposeUiApi::class) @Composable actual fun painterResource(imageResource: ImageResource): Painter { - val fileUrl: String = if (LocalSystemTheme.current == SystemTheme.Dark) { + val fileUrl: String = if (isSystemInDarkTheme()) { imageResource.darkFileUrl ?: imageResource.fileUrl } else { imageResource.fileUrl diff --git a/resources-compose/src/iosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt b/resources-compose/src/iosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt index da8b3ae9..588db0d3 100644 --- a/resources-compose/src/iosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt +++ b/resources-compose/src/iosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt @@ -4,10 +4,9 @@ package dev.icerock.moko.resources.compose +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import androidx.compose.ui.InternalComposeUiApi -import androidx.compose.ui.LocalSystemTheme import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toComposeImageBitmap @@ -18,10 +17,11 @@ import org.jetbrains.skia.Image import platform.CoreGraphics.CGImageRef import platform.UIKit.UIImage -@OptIn(ExperimentalForeignApi::class, InternalComposeUiApi::class) +@OptIn(ExperimentalForeignApi::class) @Composable actual fun painterResource(imageResource: ImageResource): Painter { - return remember(LocalSystemTheme.current, imageResource) { + val isDarkTheme: Boolean = isSystemInDarkTheme() + return remember(isDarkTheme, imageResource) { val uiImage: UIImage = imageResource.toUIImage() ?: throw IllegalArgumentException("can't read UIImage of $imageResource") diff --git a/resources-compose/src/jvmMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt b/resources-compose/src/jvmMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt index c55b420c..740344d9 100644 --- a/resources-compose/src/jvmMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt +++ b/resources-compose/src/jvmMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt @@ -4,18 +4,15 @@ package dev.icerock.moko.resources.compose +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable -import androidx.compose.ui.InternalComposeUiApi -import androidx.compose.ui.LocalSystemTheme -import androidx.compose.ui.SystemTheme import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.res.painterResource import dev.icerock.moko.resources.ImageResource -@OptIn(InternalComposeUiApi::class) @Composable actual fun painterResource(imageResource: ImageResource): Painter { - val filePath: String = if (LocalSystemTheme.current == SystemTheme.Dark) { + val filePath: String = if (isSystemInDarkTheme()) { imageResource.darkFilePath ?: imageResource.filePath } else { imageResource.filePath diff --git a/resources-compose/src/macosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt b/resources-compose/src/macosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt index 7e1d0efd..bb62cf63 100644 --- a/resources-compose/src/macosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt +++ b/resources-compose/src/macosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt @@ -4,10 +4,9 @@ package dev.icerock.moko.resources.compose +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import androidx.compose.ui.InternalComposeUiApi -import androidx.compose.ui.LocalSystemTheme import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toComposeImageBitmap @@ -19,10 +18,11 @@ import platform.AppKit.NSImage import platform.CoreGraphics.CGImageRef import platform.CoreGraphics.CGImageRelease -@OptIn(ExperimentalForeignApi::class, InternalComposeUiApi::class) +@OptIn(ExperimentalForeignApi::class) @Composable actual fun painterResource(imageResource: ImageResource): Painter { - return remember(LocalSystemTheme.current, imageResource) { + val isDarkTheme: Boolean = isSystemInDarkTheme() + return remember(isDarkTheme, imageResource) { val nsImage: NSImage = imageResource.toNSImage() ?: throw IllegalArgumentException("can't read NSImage of $imageResource")