diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/FontResources.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/FontResources.kt index 1493218d58..1923c46719 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/FontResources.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/FontResources.kt @@ -2,6 +2,7 @@ package org.jetbrains.compose.resources import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable +import androidx.compose.runtime.getValue import androidx.compose.ui.text.font.* /** @@ -32,4 +33,21 @@ expect fun Font( resource: FontResource, weight: FontWeight = FontWeight.Normal, style: FontStyle = FontStyle.Normal -): Font \ No newline at end of file +): Font + +/** + * Retrieves an ByteArray using the specified font resource. + * + * @param resource The font resource to be used. + * @return The ByteArray loaded from the resource. + */ +@ExperimentalResourceApi +@Composable +fun getFontResourceBytes(resource: FontResource): ByteArray { + val resourceReader = LocalResourceReader.current + val bytes by rememberResourceState(resource, resourceReader, { ByteArray(0) }) { env -> + val item = resource.getResourceItemByEnvironment(env) + resourceReader.read(item.path) + } + return bytes +} \ No newline at end of file diff --git a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageResources.kt b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageResources.kt index cdb9d85224..9efbcc8bd1 100644 --- a/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageResources.kt +++ b/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ImageResources.kt @@ -95,7 +95,6 @@ internal expect fun SvgElement.toSvgPainter(density: Density): Painter private val emptySvgPainter: Painter by lazy { BitmapPainter(emptyImageBitmap) } -@OptIn(ExperimentalResourceApi::class) @Composable private fun svgPainter(resource: DrawableResource): Painter { val resourceReader = LocalResourceReader.current @@ -110,6 +109,23 @@ private fun svgPainter(resource: DrawableResource): Painter { return svgPainter } +/** + * Retrieves an ByteArray using the specified drawable resource. + * + * @param resource The drawable resource to be used. + * @return The ByteArray loaded from the resource. + */ +@ExperimentalResourceApi +@Composable +fun getDrawableResourceBytes(resource: DrawableResource): ByteArray { + val resourceReader = LocalResourceReader.current + val bytes by rememberResourceState(resource, resourceReader, { ByteArray(0) }) { env -> + val item = resource.getResourceItemByEnvironment(env) + resourceReader.read(item.path) + } + return bytes +} + internal expect fun ByteArray.toImageBitmap(): ImageBitmap internal expect fun ByteArray.toXmlElement(): Element internal expect fun ByteArray.toSvgElement(): SvgElement diff --git a/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/ComposeResourceTest.kt b/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/ComposeResourceTest.kt index d12ececcda..65cdd920b2 100644 --- a/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/ComposeResourceTest.kt +++ b/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/ComposeResourceTest.kt @@ -304,4 +304,20 @@ class ComposeResourceTest { assertTrue(uri1.endsWith("/1.png")) assertTrue(uri2.endsWith("/2.png")) } + + @OptIn(ExperimentalResourceApi::class) + @Test + fun testGetResourceBytes() = runComposeUiTest { + var imageBytes = ByteArray(0) + var fontBytes = ByteArray(0) + setContent { + CompositionLocalProvider(LocalComposeEnvironment provides TestComposeEnvironment) { + imageBytes = getDrawableResourceBytes(TestDrawableResource("1.png")) + fontBytes = getFontResourceBytes(TestFontResource("font_awesome.otf")) + } + } + waitForIdle() + assertEquals(946, imageBytes.size) + assertEquals(134808, fontBytes.size) + } } diff --git a/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/TestUtils.kt b/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/TestUtils.kt index e260331f78..42f5b4f02c 100644 --- a/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/TestUtils.kt +++ b/components/resources/library/src/commonTest/kotlin/org/jetbrains/compose/resources/TestUtils.kt @@ -40,6 +40,11 @@ internal fun TestDrawableResource(path: String) = DrawableResource( setOf(ResourceItem(emptySet(), path, -1, -1)) ) +internal fun TestFontResource(path: String) = FontResource( + path, + setOf(ResourceItem(emptySet(), path, -1, -1)) +) + internal fun parsePluralSamples(samples: String): List { return samples.split(',').flatMap { val range = it.trim()