diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/DefaultIcons.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/DefaultIcons.kt new file mode 100644 index 0000000000..7909c827b0 --- /dev/null +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/DefaultIcons.kt @@ -0,0 +1,38 @@ +package org.jetbrains.compose.desktop.application.internal + +import org.gradle.api.Project +import org.gradle.api.file.RegularFile +import org.gradle.api.provider.Provider +import org.jetbrains.compose.ComposeBuildConfig + +internal object DefaultIcons { + fun forLinux(project: Project): Provider = + unpackIconIfNeeded(project, platformName = "linux", iconExt = "png") + + fun forWindows(project: Project): Provider = + unpackIconIfNeeded(project, platformName = "windows", iconExt = "ico") + + fun forMac(project: Project): Provider = + unpackIconIfNeeded(project, platformName = "mac", iconExt = "icns") + + private fun unpackIconIfNeeded(project: Project, platformName: String, iconExt: String): Provider { + val iconsDir = project.layout.buildDirectory.dir("compose/default-icons/${ComposeBuildConfig.composeVersion}") + val targetFile = iconsDir.map { it.file("icon-$platformName.$iconExt") } + val targetIoFile = targetFile.ioFile + val sourceIconName = "default-compose-desktop-icon-$platformName.$iconExt" + + if (targetIoFile.exists()) return targetFile + + val iconResourceStream = DefaultIcons.javaClass.classLoader.getResourceAsStream(sourceIconName) + ?: error("Could not find default icon resource: $sourceIconName") + iconResourceStream.use { input -> + targetIoFile.parentFile.mkdirs() + targetIoFile.createNewFile() + targetIoFile.outputStream().buffered().use { output -> + input.copyTo(output) + } + } + + return targetFile + } +} \ No newline at end of file diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureApplication.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureApplication.kt index 10bd7a862b..17216f460b 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureApplication.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureApplication.kt @@ -213,7 +213,7 @@ internal fun AbstractJPackageTask.configurePlatformSettings(app: Application) { linuxMenuGroup.set(provider { linux.menuGroup }) linuxPackageName.set(provider { linux.packageName }) linuxRpmLicenseType.set(provider { linux.rpmLicenseType }) - iconFile.set(linux.iconFile) + iconFile.set(linux.iconFile.orElse(DefaultIcons.forLinux(project))) installationPath.set(linux.installationPath) } } @@ -226,7 +226,7 @@ internal fun AbstractJPackageTask.configurePlatformSettings(app: Application) { winMenu.set(provider { win.menu }) winMenuGroup.set(provider { win.menuGroup }) winUpgradeUuid.set(provider { win.upgradeUuid }) - iconFile.set(win.iconFile) + iconFile.set(win.iconFile.orElse(DefaultIcons.forWindows(project))) installationPath.set(win.installationPath) } } @@ -241,7 +241,7 @@ internal fun AbstractJPackageTask.configurePlatformSettings(app: Application) { ) nonValidatedMacBundleID.set(provider { mac.bundleID }) nonValidatedMacSigningSettings = app.nativeDistributions.macOS.signing - iconFile.set(mac.iconFile) + iconFile.set(mac.iconFile.orElse(DefaultIcons.forMac(project))) installationPath.set(mac.installationPath) } } diff --git a/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-linux.png b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-linux.png new file mode 100644 index 0000000000..a3b0ff72fd Binary files /dev/null and b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-linux.png differ diff --git a/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-mac.icns b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-mac.icns new file mode 100644 index 0000000000..441970a8ed Binary files /dev/null and b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-mac.icns differ diff --git a/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-windows.ico b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-windows.ico new file mode 100644 index 0000000000..3798780091 Binary files /dev/null and b/gradle-plugins/compose/src/main/resources/default-compose-desktop-icon-windows.ico differ