Skip to content

Commit 4ed22eb

Browse files
authored
Merge pull request #458 from icerockdev/develop
Release 0.21.2
2 parents b0fe211 + 7196003 commit 4ed22eb

13 files changed

Lines changed: 97 additions & 38 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ buildscript {
5858
}
5959
6060
dependencies {
61-
classpath "dev.icerock.moko:resources-generator:0.21.1"
61+
classpath "dev.icerock.moko:resources-generator:0.21.2"
6262
}
6363
}
6464
@@ -76,10 +76,10 @@ project build.gradle
7676
apply plugin: "dev.icerock.mobile.multiplatform-resources"
7777
7878
dependencies {
79-
commonMainApi("dev.icerock.moko:resources:0.21.1")
80-
commonMainApi("dev.icerock.moko:resources-compose:0.21.1") // for compose multiplatform
79+
commonMainApi("dev.icerock.moko:resources:0.21.2")
80+
commonMainApi("dev.icerock.moko:resources-compose:0.21.2") // for compose multiplatform
8181
82-
commonTestImplementation("dev.icerock.moko:resources-test:0.21.1")
82+
commonTestImplementation("dev.icerock.moko:resources-test:0.21.2")
8383
}
8484
8585
multiplatformResources {
@@ -98,7 +98,7 @@ should [add `export` declarations](https://kotlinlang.org/docs/multiplatform-bui
9898

9999
```
100100
framework {
101-
export("dev.icerock.moko:resources:0.21.1")
101+
export("dev.icerock.moko:resources:0.21.2")
102102
export("dev.icerock.moko:graphics:0.9.0") // toUIColor here
103103
}
104104
```

gradle/moko.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
resourcesVersion = "0.21.1"
2+
resourcesVersion = "0.21.2"
33

44
[libraries]
55
resources = { module = "dev.icerock.moko:resources", version.ref = "resourcesVersion" }

resources-compose/src/appleMain/kotlin/dev/icerock/moko/resources/compose/internal/CGImageRef+Skia.kt

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,28 @@ import cnames.structs.CGColorSpace
88
import cnames.structs.CGImage
99
import kotlinx.cinterop.CPointed
1010
import kotlinx.cinterop.CPointer
11+
import kotlinx.cinterop.CValue
1112
import kotlinx.cinterop.readBytes
1213
import org.jetbrains.skia.ColorAlphaType
1314
import org.jetbrains.skia.ColorType
1415
import org.jetbrains.skia.Image
1516
import org.jetbrains.skia.ImageInfo
1617
import platform.CoreGraphics.CGBitmapContextCreate
1718
import platform.CoreGraphics.CGColorSpaceCreateDeviceRGB
19+
import platform.CoreGraphics.CGContextClearRect
1820
import platform.CoreGraphics.CGContextDrawImage
1921
import platform.CoreGraphics.CGContextRef
2022
import platform.CoreGraphics.CGContextRelease
23+
import platform.CoreGraphics.CGImageAlphaInfo
2124
import platform.CoreGraphics.CGImageGetHeight
2225
import platform.CoreGraphics.CGImageGetWidth
2326
import platform.CoreGraphics.CGImageRef
27+
import platform.CoreGraphics.CGRect
2428
import platform.CoreGraphics.CGRectMake
2529
import platform.posix.free
2630
import platform.posix.malloc
2731
import platform.posix.size_t
32+
import platform.posix.uint32_t
2833

2934
internal fun CGImageRef.toSkiaImage(): Image {
3035
val cgImage: CPointer<CGImage> = this
@@ -36,30 +41,34 @@ internal fun CGImageRef.toSkiaImage(): Image {
3641
val bytesPerPixel: ULong = bitsPerPixel / bitsPerComponent
3742
val bytesPerRow: ULong = width * bytesPerPixel
3843
val bufferSize: ULong = width * height * bytesPerPixel
44+
val bitmapInfo: uint32_t = CGImageAlphaInfo.kCGImageAlphaPremultipliedLast.value
45+
46+
check(bufferSize != 0UL) { "image can't be 0 bytes" }
47+
check(width > 0UL) { "width should be more then 0 px ($width)" }
48+
check(height > 0UL) { "height should be more then 0 px ($height)" }
3949

4050
val data: CPointer<out CPointed> = malloc(bufferSize)
4151
?: throw IllegalArgumentException("can't allocate memory for render bitmap of $cgImage")
4252

53+
val rect: CValue<CGRect> = CGRectMake(
54+
x = 0.0,
55+
y = 0.0,
56+
width = width.toDouble(),
57+
height = height.toDouble()
58+
)
59+
4360
val ctx: CGContextRef = CGBitmapContextCreate(
4461
data = data,
4562
width = width,
4663
height = height,
4764
bitsPerComponent = bitsPerComponent,
4865
bytesPerRow = bytesPerRow,
4966
space = space,
50-
bitmapInfo = platform.CoreGraphics.CGImageAlphaInfo.kCGImageAlphaPremultipliedLast.value
67+
bitmapInfo = bitmapInfo
5168
) ?: throw IllegalArgumentException("can't create bitmap context for $cgImage")
5269

53-
CGContextDrawImage(
54-
ctx,
55-
rect = CGRectMake(
56-
x = 0.0,
57-
y = 0.0,
58-
width = width.toDouble(),
59-
height = height.toDouble()
60-
),
61-
image = cgImage
62-
)
70+
CGContextClearRect(c = ctx, rect = rect)
71+
CGContextDrawImage(c = ctx, rect = rect, image = cgImage)
6372

6473
CGContextRelease(ctx)
6574

resources-compose/src/iosMain/kotlin/dev/icerock/moko/resources/compose/ImageResource.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import dev.icerock.moko.resources.ImageResource
1313
import dev.icerock.moko.resources.compose.internal.toSkiaImage
1414
import org.jetbrains.skia.Image
1515
import platform.CoreGraphics.CGImageRef
16-
import platform.CoreGraphics.CGImageRelease
1716
import platform.UIKit.UIImage
1817

1918
@Composable
@@ -27,8 +26,6 @@ actual fun painterResource(imageResource: ImageResource): Painter {
2726

2827
val skiaImage: Image = cgImage.toSkiaImage()
2928

30-
CGImageRelease(cgImage)
31-
3229
BitmapPainter(image = skiaImage.toComposeImageBitmap())
3330
}
3431
}

resources-generator/src/main/kotlin/dev/icerock/gradle/AndroidPluginLogic.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import dev.icerock.gradle.generator.MRGenerator
1010
import dev.icerock.gradle.generator.ResourceGeneratorFeature
1111
import dev.icerock.gradle.generator.android.AndroidMRGenerator
1212
import dev.icerock.gradle.utils.isDependsOn
13+
import org.gradle.api.Action
1314
import org.gradle.api.Project
15+
import org.gradle.api.Task
1416
import org.gradle.kotlin.dsl.getByType
1517
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
1618
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
@@ -52,11 +54,15 @@ internal class AndroidPluginLogic(
5254
project.tasks
5355
.matching { it.name.startsWith("package") && it.name.endsWith("Assets") }
5456
.configureEach { task ->
55-
task.doFirst {
56-
val android = project.extensions.getByType<BaseExtension>()
57-
val assets = android.sourceSets.getByName("main").assets
58-
assets.setSrcDirs(assets.srcDirs)
59-
}
57+
// for gradle optimizations we should use anonymous object
58+
@Suppress("ObjectLiteralToLambda")
59+
task.doFirst(object : Action<Task> {
60+
override fun execute(t: Task) {
61+
val android = project.extensions.getByType<BaseExtension>()
62+
val assets = android.sourceSets.getByName("main").assets
63+
assets.setSrcDirs(assets.srcDirs)
64+
}
65+
})
6066
}
6167
}
6268

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/apple/AppleMRGenerator.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import dev.icerock.gradle.tasks.CopyExecutableResourcesToApp
1616
import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppEntryPointTask
1717
import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppTask
1818
import dev.icerock.gradle.utils.calculateResourcesHash
19+
import dev.icerock.gradle.utils.dependsOnProcessResources
1920
import dev.icerock.gradle.utils.klibs
2021
import org.gradle.api.Action
2122
import org.gradle.api.Project
@@ -99,6 +100,8 @@ class AppleMRGenerator(
99100
setupFrameworkResources()
100101
setupTestsResources()
101102
setupFatFrameworkTasks()
103+
104+
dependsOnProcessResources(project, sourceSet, generationTask)
102105
}
103106

104107
override fun beforeMRGeneration() {

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/common/CommonMRGenerator.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,11 @@ class CommonMRGenerator(
3535
}.configureEach {
3636
it.dependsOn(generationTask)
3737
}
38+
39+
project.tasks
40+
.matching { it.name.startsWith("metadata") && it.name.endsWith("ProcessResources") }
41+
.configureEach {
42+
it.dependsOn(generationTask)
43+
}
3844
}
3945
}

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/js/JsMRGenerator.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import com.squareup.kotlinpoet.STRING
1111
import com.squareup.kotlinpoet.TypeSpec
1212
import dev.icerock.gradle.generator.MRGenerator
1313
import dev.icerock.gradle.utils.calculateResourcesHash
14+
import dev.icerock.gradle.utils.dependsOnProcessResources
1415
import dev.icerock.gradle.utils.klibs
1516
import org.gradle.api.Action
1617
import org.gradle.api.Project
1718
import org.gradle.api.Task
19+
import org.gradle.jvm.tasks.Jar
1820
import org.gradle.kotlin.dsl.withType
1921
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
2022
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
@@ -87,6 +89,13 @@ class JsMRGenerator(
8789
}
8890
setupKLibResources(generationTask)
8991
setupResources()
92+
93+
// Declare task ':web-app:generateMRcommonMain' as an input of ':web-app:jsSourcesJar'.
94+
project.tasks.withType<Jar>().configureEach {
95+
it.dependsOn(generationTask)
96+
}
97+
98+
dependsOnProcessResources(project, sourceSet, generationTask)
9099
}
91100

92101
private fun setupKLibResources(generationTask: Task) {

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/jvm/JvmMRGenerator.kt

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.squareup.kotlinpoet.PropertySpec
1010
import com.squareup.kotlinpoet.STRING
1111
import com.squareup.kotlinpoet.TypeSpec
1212
import dev.icerock.gradle.generator.MRGenerator
13+
import dev.icerock.gradle.utils.dependsOnProcessResources
1314
import org.gradle.api.Project
1415
import org.gradle.api.Task
1516
import org.gradle.jvm.tasks.Jar
@@ -46,31 +47,39 @@ class JvmMRGenerator(
4647
STRINGS_BUNDLE_PROPERTY_NAME,
4748
STRING,
4849
KModifier.PRIVATE
49-
)
50-
.initializer(CodeBlock.of("\"%L/%L\"", LOCALIZATION_DIR, "${flattenClassName}_$STRINGS_BUNDLE_NAME"))
51-
.build()
50+
).initializer(
51+
CodeBlock.of(
52+
"\"%L/%L\"",
53+
LOCALIZATION_DIR,
54+
"${flattenClassName}_$STRINGS_BUNDLE_NAME"
55+
)
56+
).build()
5257
)
5358

5459
mrClass.addProperty(
5560
PropertySpec.builder(
5661
PLURALS_BUNDLE_PROPERTY_NAME,
5762
STRING,
5863
KModifier.PRIVATE
59-
)
60-
.initializer(CodeBlock.of("\"%L/%L\"", LOCALIZATION_DIR, "${flattenClassName}_$PLURALS_BUNDLE_NAME"))
61-
.build()
64+
).initializer(
65+
CodeBlock.of(
66+
"\"%L/%L\"",
67+
LOCALIZATION_DIR,
68+
"${flattenClassName}_$PLURALS_BUNDLE_NAME"
69+
)
70+
).build()
6271
)
6372
}
6473

6574
override fun apply(generationTask: Task, project: Project) {
66-
project.tasks.apply {
67-
withType<KotlinCompile>().all {
68-
it.dependsOn(generationTask)
69-
}
75+
project.tasks.withType<KotlinCompile>().configureEach {
76+
it.dependsOn(generationTask)
7077
}
7178
project.tasks.withType<Jar>().configureEach {
7279
it.exclude("MR/**")
80+
it.dependsOn(generationTask)
7381
}
82+
dependsOnProcessResources(project, sourceSet, generationTask)
7483
}
7584

7685
companion object {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright 2023 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package dev.icerock.gradle.utils
6+
7+
import dev.icerock.gradle.generator.MRGenerator
8+
import org.gradle.api.Project
9+
import org.gradle.api.Task
10+
11+
fun dependsOnProcessResources(project: Project, sourceSet: MRGenerator.SourceSet, task: Task) {
12+
project.tasks
13+
.matching { it.name == sourceSet.name.removeSuffix("Main") + "ProcessResources" }
14+
.configureEach {
15+
it.dependsOn(task)
16+
}
17+
}

0 commit comments

Comments
 (0)