Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add wasm target #155

Closed
wants to merge 25 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
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
45 changes: 23 additions & 22 deletions app/common/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
id("project-kmp")
kotlin("plugin.serialization")
alias(libs.plugins.moko.resources)
// alias(libs.plugins.moko.resources)
}

kotlin {
Expand All @@ -13,15 +13,16 @@ kotlin {
api(compose.foundation)
api(compose.ui)
api(compose.material)
// api(compose.materialIconsExtended)

api(projects.imageLoader)
implementation(projects.extension.blur)
implementation(projects.extension.mokoResources)
// implementation(projects.extension.mokoResources)

implementation(libs.moko.resources)
// implementation(libs.moko.resources)
implementation(libs.kotlinx.serialization.json)
implementation(libs.ktor.client.logging)
implementation(libs.kermit)
// implementation(libs.kermit)
}
}
val androidMain by getting {
Expand All @@ -39,7 +40,7 @@ kotlin {
implementation(libs.ktor.client.darwin)
}
}
val jsMain by getting {
val jsWasmMain by getting {
dependencies {
implementation(libs.ktor.client.js)
}
Expand All @@ -51,20 +52,20 @@ android {
namespace = "io.github.qdsfdhvh.imageloader.demo.common"
}

multiplatformResources {
multiplatformResourcesPackage = "com.seiko.imageloader.demo"
}

// workaround
tasks.matching { it.name == "iosSimulatorArm64ProcessResources" }.configureEach {
dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
}
tasks.matching { it.name == "iosX64ProcessResources" }.configureEach {
dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
}
tasks.matching { it.name == "macosArm64ProcessResources" }.configureEach {
dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
}
tasks.matching { it.name == "macosX64ProcessResources" }.configureEach {
dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
}
// multiplatformResources {
// multiplatformResourcesPackage = "com.seiko.imageloader.demo"
// }
//
// // workaround
// tasks.matching { it.name == "iosSimulatorArm64ProcessResources" }.configureEach {
// dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
// }
// tasks.matching { it.name == "iosX64ProcessResources" }.configureEach {
// dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
// }
// tasks.matching { it.name == "macosArm64ProcessResources" }.configureEach {
// dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
// }
// tasks.matching { it.name == "macosX64ProcessResources" }.configureEach {
// dependsOn(tasks.matching { it.name == "generateMRcommonMain" })
// }
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import co.touchlab.kermit.Logger
import com.seiko.imageloader.demo.MR
import com.seiko.imageloader.demo.data.imageJsonData
import com.seiko.imageloader.rememberImagePainter

Expand All @@ -42,7 +40,7 @@ fun OtherImagesScene(
val changeUrl by remember {
derivedStateOf {
(images.getOrNull(changeIndex)?.imageUrl ?: "").also {
Logger.d { "changeUrl = $it" }
// Logger.d { "changeUrl = $it" }
}
}
}
Expand Down Expand Up @@ -108,21 +106,21 @@ fun OtherImagesScene(
item {
Text("Moko Resource")
}
item {
ImageItem(MR.files.cat)
}
item {
ImageItem(MR.files.collection_logo)
}
item {
ImageItem(MR.images.car_black)
}
item {
ImageItem(MR.colors.valueColor)
}
item {
ImageItem(MR.colors.valueColor2)
}
// item {
// ImageItem(MR.files.cat)
// }
// item {
// ImageItem(MR.files.collection_logo)
// }
// item {
// ImageItem(MR.images.car_black)
// }
// item {
// ImageItem(MR.colors.valueColor)
// }
// item {
// ImageItem(MR.colors.valueColor2)
// }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import io.ktor.client.plugins.logging.LogLevel
import io.ktor.client.plugins.logging.Logger
import io.ktor.client.plugins.logging.Logging
import io.ktor.client.request.headers
import co.touchlab.kermit.Logger as DebugLogger
// import co.touchlab.kermit.Logger as DebugLogger

val customKtorUrlFetcher = KtorUrlFetcher.Factory {
HttpClient(httpEngine) {
Expand All @@ -21,7 +21,7 @@ val customKtorUrlFetcher = KtorUrlFetcher.Factory {
level = LogLevel.HEADERS
logger = object : Logger {
override fun log(message: String) {
DebugLogger.d(tag = "HttpClient") { message }
// DebugLogger.d(tag = "HttpClient") { message }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@ package com.seiko.imageloader.demo.util
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.painter.Painter
import co.touchlab.kermit.Severity
import com.seiko.imageloader.ImageLoaderConfigBuilder
import com.seiko.imageloader.component.fetcher.MokoResourceFetcher
import com.seiko.imageloader.intercept.BlurInterceptor
import com.seiko.imageloader.intercept.Interceptor
import com.seiko.imageloader.model.ImageResult
import com.seiko.imageloader.model.NullRequestData
import com.seiko.imageloader.util.LogPriority
import com.seiko.imageloader.util.Logger
import co.touchlab.kermit.Logger as DebugLogger

fun ImageLoaderConfigBuilder.commonConfig() {
logger = object : Logger {
Expand All @@ -23,33 +20,33 @@ fun ImageLoaderConfigBuilder.commonConfig() {
throwable: Throwable?,
message: String,
) {
DebugLogger.log(
severity = when (priority) {
LogPriority.VERBOSE -> Severity.Verbose
LogPriority.DEBUG -> Severity.Debug
LogPriority.INFO -> Severity.Info
LogPriority.WARN -> Severity.Warn
LogPriority.ERROR -> Severity.Error
LogPriority.ASSERT -> Severity.Assert
},
tag = tag,
throwable = throwable,
message = buildString {
if (data != null) {
append("[image data] ")
append(data.toString().take(100))
append('\n')
}
append("[message] ")
append(message)
},
)
// DebugLogger.log(
// severity = when (priority) {
// LogPriority.VERBOSE -> Severity.Verbose
// LogPriority.DEBUG -> Severity.Debug
// LogPriority.INFO -> Severity.Info
// LogPriority.WARN -> Severity.Warn
// LogPriority.ERROR -> Severity.Error
// LogPriority.ASSERT -> Severity.Assert
// },
// tag = tag,
// throwable = throwable,
// message = buildString {
// if (data != null) {
// append("[image data] ")
// append(data.toString().take(100))
// append('\n')
// }
// append("[message] ")
// append(message)
// },
// )
}

override fun isLoggable(priority: LogPriority) = priority >= LogPriority.DEBUG
}
components {
add(MokoResourceFetcher.Factory())
// add(MokoResourceFetcher.Factory())
}
interceptor {
addInterceptor(BlurInterceptor())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.seiko.imageloader.demo.util

import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

val JSON = Json {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.seiko.imageloader.demo.util

import io.ktor.client.engine.HttpClientEngine
import io.ktor.client.engine.js.Js

actual val httpEngine: HttpClientEngine
get() = Js.create()
4 changes: 2 additions & 2 deletions app/desktop/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ kotlin {
}
@Suppress("UNUSED_VARIABLE")
sourceSets {
@Suppress("UNUSED_VARIABLE")
val jvmMain by getting {
dependencies {
implementation(projects.app.common)
implementation(projects.extension.imageio)
// implementation(projects.extension.imageio)
implementation(compose.desktop.currentOs)
}
}
val jvmTest by getting
}
}

Expand Down
2 changes: 2 additions & 0 deletions app/intellij-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental")
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap")
}

java {
Expand Down
45 changes: 45 additions & 0 deletions app/wasm/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig

plugins {
kotlin("multiplatform")
id("org.jetbrains.compose")
}

kotlin {
@Suppress("OPT_IN_USAGE")
wasm {
moduleName = "compose-imageloader-demo"
browser {
commonWebpackConfig {
devServer = (devServer ?: KotlinWebpackConfig.DevServer()).copy(
open = mapOf(
"app" to mapOf(
"name" to "google chrome",
),
),
)
}
}
binaries.executable()
}
sourceSets {
@Suppress("UNUSED_VARIABLE")
val wasmMain by getting {
dependencies {
implementation(projects.app.common)
implementation(compose.runtime)
implementation(compose.ui)
}
}
}
}

compose.experimental {
web.application {
}
}

// // See https://youtrack.jetbrains.com/issue/KT-57203 related issue
// tasks.named("wasmDevelopmentExecutableCompileSync") {
// dependsOn("wasmBrowserProductionWebpack")
// }
10 changes: 10 additions & 0 deletions app/wasm/src/wasmMain/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.window.CanvasBasedWindow
import com.seiko.imageloader.demo.App

@OptIn(ExperimentalComposeUiApi::class)
fun main() {
CanvasBasedWindow("ComposeImageLoader") {
App()
}
}
21 changes: 21 additions & 0 deletions app/wasm/src/wasmMain/resources/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Compose ImageLoader (Kotlin/Wasm)</title>
<script src="skiko.js"></script>
<script type="module" src="load.mjs"></script>
<style>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<canvas id="ComposeTarget"></canvas>
</body>
</html>
4 changes: 4 additions & 0 deletions app/wasm/src/wasmMain/resources/load.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { instantiate } from './compose-imageloader-demo.uninstantiated.mjs';

await wasmSetup;
instantiate({ skia: Module['asm'] });
1 change: 1 addition & 0 deletions app/web/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ kotlin {
binaries.executable()
}
sourceSets {
@Suppress("UNUSED_VARIABLE")
val jsMain by getting {
dependencies {
implementation(projects.app.common)
Expand Down
6 changes: 4 additions & 2 deletions app/web/src/jsMain/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.window.Window
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.window.CanvasBasedWindow
import com.seiko.imageloader.ImageLoader
import com.seiko.imageloader.LocalImageLoader
import com.seiko.imageloader.component.setupDefaultComponents
Expand All @@ -10,9 +11,10 @@ import okio.FileSystem
import okio.fakefilesystem.FakeFileSystem
import org.jetbrains.skiko.wasm.onWasmReady

@OptIn(ExperimentalComposeUiApi::class)
fun main() {
onWasmReady {
Window("ComposeImageLoader") {
CanvasBasedWindow("ComposeImageLoader") {
CompositionLocalProvider(
LocalImageLoader provides remember { generateImageLoader() },
) {
Expand Down
9 changes: 3 additions & 6 deletions app/web/src/jsMain/resources/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
<head>
<meta charset="UTF-8">
<title>ComposeImageLoader</title>
<script src="skiko.js"> </script>
<link type="text/css" rel="stylesheet" href="styles.css" />
<script src="skiko.js"></script>
</head>
<body>
<div>
<canvas id="ComposeTarget" width="600" height="800"></canvas>
</div>
<script src="web.js"> </script>
<canvas id="ComposeTarget"></canvas>
<script src="web.js"></script>
</body>
</html>
Loading
Loading