diff --git a/.gitattributes b/.gitattributes index e75b5faf..0af0d1df 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16,6 +16,7 @@ *.jpeg binary *.gif binary *.ico binary +*.icns binary *.gz binary *.zip binary *.7z binary diff --git a/README.md b/README.md index 1d66ad19..b72f57cc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![image](https://github.com/Suwayomi/Tachidesk/raw/master/server/src/main/resources/icon/faviconlogo.png) +![image](resources/icon.png) # Tachidesk-JUI A free and open source manga reader to read manga from a [Tachidesk](https://github.com/Suwayomi/Tachidesk) server. diff --git a/build.gradle.kts b/build.gradle.kts index 96224bd5..5eee278a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -192,10 +192,15 @@ compose.desktop { upgradeUuid = "B2ED947E-81E4-4258-8388-2B1EDF5E0A30" shortcut = true menu = true + iconFile.set(project.file("resources/icon.ico")) } macOS { bundleID = "ca.gosyer.tachideskjui" packageName = rootProject.name + iconFile.set(project.file("resources/icon.icns")) + } + linux { + iconFile.set(project.file("resources/icon.png")) } } } diff --git a/resources/icon.icns b/resources/icon.icns new file mode 100644 index 00000000..84067125 Binary files /dev/null and b/resources/icon.icns differ diff --git a/resources/icon.ico b/resources/icon.ico new file mode 100644 index 00000000..b5d019a0 Binary files /dev/null and b/resources/icon.ico differ diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 00000000..f2bb1780 Binary files /dev/null and b/resources/icon.png differ diff --git a/src/main/kotlin/ca/gosyer/ui/base/WindowDialog.kt b/src/main/kotlin/ca/gosyer/ui/base/WindowDialog.kt index 94180a7d..20e3f340 100644 --- a/src/main/kotlin/ca/gosyer/ui/base/WindowDialog.kt +++ b/src/main/kotlin/ca/gosyer/ui/base/WindowDialog.kt @@ -36,6 +36,7 @@ import androidx.compose.ui.window.WindowSize import androidx.compose.ui.window.rememberWindowState import ca.gosyer.common.di.AppScope import ca.gosyer.data.translation.XmlResourceBundle +import ca.gosyer.ui.base.components.setIcon import ca.gosyer.ui.base.resources.LocalResources import ca.gosyer.ui.base.theme.AppTheme import ca.gosyer.util.lang.launchApplication @@ -92,6 +93,7 @@ fun WindowDialog( }, alwaysOnTop = forceFocus ) { + setIcon() CompositionLocalProvider( LocalResources provides resources ) { @@ -158,6 +160,7 @@ fun WindowDialog( }, alwaysOnTop = forceFocus, ) { + setIcon() CompositionLocalProvider( LocalResources provides resources ) { diff --git a/src/main/kotlin/ca/gosyer/ui/base/components/MenuController.kt b/src/main/kotlin/ca/gosyer/ui/base/components/MenuController.kt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/kotlin/ca/gosyer/ui/base/components/Window.kt b/src/main/kotlin/ca/gosyer/ui/base/components/Window.kt new file mode 100644 index 00000000..c0d81224 --- /dev/null +++ b/src/main/kotlin/ca/gosyer/ui/base/components/Window.kt @@ -0,0 +1,16 @@ +package ca.gosyer.ui.base.components + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.window.FrameWindowScope +import javax.imageio.ImageIO + +@Composable +fun FrameWindowScope.setIcon() { + DisposableEffect(Unit) { + window.iconImage = this::class.java.classLoader.getResourceAsStream("icon.png")!!.use { + ImageIO.read(it) + } + onDispose { } + } +} \ No newline at end of file diff --git a/src/main/kotlin/ca/gosyer/ui/main/main.kt b/src/main/kotlin/ca/gosyer/ui/main/main.kt index d6788a2e..f02950ba 100644 --- a/src/main/kotlin/ca/gosyer/ui/main/main.kt +++ b/src/main/kotlin/ca/gosyer/ui/main/main.kt @@ -30,6 +30,7 @@ import ca.gosyer.data.ui.model.ThemeMode import ca.gosyer.ui.base.WindowDialog import ca.gosyer.ui.base.components.LoadingScreen import ca.gosyer.ui.base.components.LocalComposeWindow +import ca.gosyer.ui.base.components.setIcon import ca.gosyer.ui.base.prefs.asStateIn import ca.gosyer.ui.base.resources.LocalResources import ca.gosyer.ui.base.resources.stringResource @@ -163,6 +164,7 @@ suspend fun main() { } } ) { + setIcon() AppTheme { CompositionLocalProvider( LocalComposeWindow provides window, diff --git a/src/main/kotlin/ca/gosyer/ui/reader/ReaderMenu.kt b/src/main/kotlin/ca/gosyer/ui/reader/ReaderMenu.kt index da0f8dd4..565103f2 100644 --- a/src/main/kotlin/ca/gosyer/ui/reader/ReaderMenu.kt +++ b/src/main/kotlin/ca/gosyer/ui/reader/ReaderMenu.kt @@ -49,6 +49,7 @@ import ca.gosyer.ui.base.components.ErrorScreen import ca.gosyer.ui.base.components.LoadingScreen import ca.gosyer.ui.base.components.LocalComposeWindow import ca.gosyer.ui.base.components.mangaAspectRatio +import ca.gosyer.ui.base.components.setIcon import ca.gosyer.ui.base.resources.LocalResources import ca.gosyer.ui.base.resources.stringResource import ca.gosyer.ui.base.theme.AppTheme @@ -105,6 +106,7 @@ fun openReaderMenu(chapterIndex: Int, mangaId: Long) { shortcuts[it.key]?.invoke(it) ?: false } ) { + setIcon() CompositionLocalProvider( LocalComposeWindow provides window, LocalResources provides resources diff --git a/src/main/kotlin/ca/gosyer/util/compose/Theme.kt b/src/main/kotlin/ca/gosyer/util/compose/Theme.kt index 9b256870..5bd2233a 100644 --- a/src/main/kotlin/ca/gosyer/util/compose/Theme.kt +++ b/src/main/kotlin/ca/gosyer/util/compose/Theme.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState import ca.gosyer.common.di.AppScope import ca.gosyer.data.translation.XmlResourceBundle +import ca.gosyer.ui.base.components.setIcon import ca.gosyer.ui.base.resources.LocalResources import ca.gosyer.ui.base.theme.AppTheme @@ -51,6 +52,7 @@ fun ThemedWindow( onPreviewKeyEvent, onKeyEvent ) { + setIcon() CompositionLocalProvider( LocalResources provides resources ) { diff --git a/src/main/resources/icon.png b/src/main/resources/icon.png new file mode 100644 index 00000000..f2bb1780 Binary files /dev/null and b/src/main/resources/icon.png differ