diff --git a/assets/icons/app-icon.ico b/assets/icons/app-icon.ico deleted file mode 100644 index 3b194e2..0000000 Binary files a/assets/icons/app-icon.ico and /dev/null differ diff --git a/assets/icons/app-icon.png b/assets/icons/app-icon.png deleted file mode 100644 index b10a88d..0000000 Binary files a/assets/icons/app-icon.png and /dev/null differ diff --git a/assets/icons/icon.png b/assets/icons/icon.png new file mode 100644 index 0000000..82958f4 Binary files /dev/null and b/assets/icons/icon.png differ diff --git a/assets/icons/linux/icons/128x128.png b/assets/icons/linux/icons/128x128.png new file mode 100644 index 0000000..015aa39 Binary files /dev/null and b/assets/icons/linux/icons/128x128.png differ diff --git a/assets/icons/linux/icons/16x16.png b/assets/icons/linux/icons/16x16.png new file mode 100644 index 0000000..f8301d1 Binary files /dev/null and b/assets/icons/linux/icons/16x16.png differ diff --git a/assets/icons/linux/icons/256x256.png b/assets/icons/linux/icons/256x256.png new file mode 100644 index 0000000..720a8ce Binary files /dev/null and b/assets/icons/linux/icons/256x256.png differ diff --git a/assets/icons/linux/icons/32x32.png b/assets/icons/linux/icons/32x32.png new file mode 100644 index 0000000..17957a1 Binary files /dev/null and b/assets/icons/linux/icons/32x32.png differ diff --git a/assets/icons/linux/icons/48x48.png b/assets/icons/linux/icons/48x48.png new file mode 100644 index 0000000..f8fc36b Binary files /dev/null and b/assets/icons/linux/icons/48x48.png differ diff --git a/assets/icons/linux/icons/512x512.png b/assets/icons/linux/icons/512x512.png new file mode 100644 index 0000000..bedea2d Binary files /dev/null and b/assets/icons/linux/icons/512x512.png differ diff --git a/assets/icons/linux/icons/64x64.png b/assets/icons/linux/icons/64x64.png new file mode 100644 index 0000000..06f1d4e Binary files /dev/null and b/assets/icons/linux/icons/64x64.png differ diff --git a/assets/icons/macos/1024x1024.png b/assets/icons/macos/1024x1024.png new file mode 100644 index 0000000..928d135 Binary files /dev/null and b/assets/icons/macos/1024x1024.png differ diff --git a/assets/icons/macos/128x128.png b/assets/icons/macos/128x128.png new file mode 100644 index 0000000..49372a4 Binary files /dev/null and b/assets/icons/macos/128x128.png differ diff --git a/assets/icons/macos/16x16.png b/assets/icons/macos/16x16.png new file mode 100644 index 0000000..ef0e74e Binary files /dev/null and b/assets/icons/macos/16x16.png differ diff --git a/assets/icons/macos/256x256.png b/assets/icons/macos/256x256.png new file mode 100644 index 0000000..0e5e373 Binary files /dev/null and b/assets/icons/macos/256x256.png differ diff --git a/assets/icons/macos/32x32.png b/assets/icons/macos/32x32.png new file mode 100644 index 0000000..1ba7580 Binary files /dev/null and b/assets/icons/macos/32x32.png differ diff --git a/assets/icons/macos/512x512.png b/assets/icons/macos/512x512.png new file mode 100644 index 0000000..ea38e9f Binary files /dev/null and b/assets/icons/macos/512x512.png differ diff --git a/assets/icons/macos/64x64.png b/assets/icons/macos/64x64.png new file mode 100644 index 0000000..9264c7c Binary files /dev/null and b/assets/icons/macos/64x64.png differ diff --git a/assets/icons/macos/icon.icns b/assets/icons/macos/icon.icns new file mode 100644 index 0000000..4c2dee9 Binary files /dev/null and b/assets/icons/macos/icon.icns differ diff --git a/assets/icons/windows/128x128.png b/assets/icons/windows/128x128.png new file mode 100644 index 0000000..73bb44d Binary files /dev/null and b/assets/icons/windows/128x128.png differ diff --git a/assets/icons/windows/16x16.png b/assets/icons/windows/16x16.png new file mode 100644 index 0000000..eb28ef7 Binary files /dev/null and b/assets/icons/windows/16x16.png differ diff --git a/assets/icons/windows/256x256.png b/assets/icons/windows/256x256.png new file mode 100644 index 0000000..0e5e373 Binary files /dev/null and b/assets/icons/windows/256x256.png differ diff --git a/assets/icons/windows/32x32.png b/assets/icons/windows/32x32.png new file mode 100644 index 0000000..cb2b4cb Binary files /dev/null and b/assets/icons/windows/32x32.png differ diff --git a/assets/icons/windows/48x48.png b/assets/icons/windows/48x48.png new file mode 100644 index 0000000..6715aec Binary files /dev/null and b/assets/icons/windows/48x48.png differ diff --git a/assets/icons/windows/64x64.png b/assets/icons/windows/64x64.png new file mode 100644 index 0000000..a915058 Binary files /dev/null and b/assets/icons/windows/64x64.png differ diff --git a/assets/icons/windows/icon.ico b/assets/icons/windows/icon.ico new file mode 100644 index 0000000..e5a0135 Binary files /dev/null and b/assets/icons/windows/icon.ico differ diff --git a/scripts/package-electron.mjs b/scripts/package-electron.mjs index 9f64803..aa0b591 100644 --- a/scripts/package-electron.mjs +++ b/scripts/package-electron.mjs @@ -11,8 +11,8 @@ const outputDirectoryName = 'win-unpacked'; const scriptDirectory = dirname(fileURLToPath(import.meta.url)); const repositoryRoot = resolve(scriptDirectory, '..'); const assetDirectory = join(repositoryRoot, 'assets'); -const windowsIconPath = join(assetDirectory, 'icons', 'app-icon.ico'); -const windowIconPath = join(assetDirectory, 'icons', 'app-icon.png'); +const sourceIconPath = join(assetDirectory, 'icons', 'icon.png'); +const windowsIconPath = join(assetDirectory, 'icons', 'windows', 'icon.ico'); const electronDistributionDirectory = join(repositoryRoot, 'node_modules', 'electron', 'dist'); const rendererBuildDirectory = join(repositoryRoot, 'dist'); const electronBuildDirectory = join(repositoryRoot, 'dist-electron'); @@ -94,7 +94,7 @@ async function main() { await Promise.all([ ensurePathExists(assetDirectory, 'Application assets'), - ensurePathExists(windowIconPath, 'Window icon'), + ensurePathExists(sourceIconPath, 'Source application icon'), ensurePathExists(windowsIconPath, 'Windows application icon'), ensurePathExists(electronDistributionDirectory, 'Electron runtime'), ensurePathExists(rendererBuildDirectory, 'Renderer build output'), diff --git a/src/main/windows/appIcon.ts b/src/main/windows/appIcon.ts index 0a3de91..25e6c04 100644 --- a/src/main/windows/appIcon.ts +++ b/src/main/windows/appIcon.ts @@ -11,7 +11,14 @@ function getPathModule(platform: NodeJS.Platform) { export function resolveWindowIconPath(context: WindowIconPathContext): string { const pathModule = getPathModule(context.platform); - const iconFileName = context.platform === 'win32' ? 'app-icon.ico' : 'app-icon.png'; - - return pathModule.join(context.appPath, 'assets', 'icons', iconFileName); + switch (context.platform) { + case 'win32': + return pathModule.join(context.appPath, 'assets', 'icons', 'windows', 'icon.ico'); + case 'darwin': + return pathModule.join(context.appPath, 'assets', 'icons', 'macos', 'icon.icns'); + case 'linux': + return pathModule.join(context.appPath, 'assets', 'icons', 'linux', 'icons', '512x512.png'); + default: + return pathModule.join(context.appPath, 'assets', 'icons', 'icon.png'); + } } diff --git a/tests/main/appIcon.test.ts b/tests/main/appIcon.test.ts index aa19d6d..0dffa93 100644 --- a/tests/main/appIcon.test.ts +++ b/tests/main/appIcon.test.ts @@ -3,21 +3,30 @@ import { describe, expect, test } from 'bun:test'; import { resolveWindowIconPath } from '@main/windows/appIcon'; describe('resolveWindowIconPath', () => { - test('uses the Windows ico asset from the packaged app assets directory', () => { + test('uses the Windows ico asset from the platform-specific icon directory', () => { expect( resolveWindowIconPath({ appPath: 'C:\\workspace\\personal\\repositories\\kopaya', platform: 'win32', }), - ).toBe('C:\\workspace\\personal\\repositories\\kopaya\\assets\\icons\\app-icon.ico'); + ).toBe('C:\\workspace\\personal\\repositories\\kopaya\\assets\\icons\\windows\\icon.ico'); }); - test('uses the PNG asset on non-Windows platforms', () => { + test('uses the macOS icns asset on Darwin', () => { expect( resolveWindowIconPath({ appPath: '/Applications/Kopaya.app/Contents/Resources/app', platform: 'darwin', }), - ).toBe('/Applications/Kopaya.app/Contents/Resources/app/assets/icons/app-icon.png'); + ).toBe('/Applications/Kopaya.app/Contents/Resources/app/assets/icons/macos/icon.icns'); + }); + + test('uses the Linux 512px PNG asset on Linux', () => { + expect( + resolveWindowIconPath({ + appPath: '/opt/kopaya/resources/app', + platform: 'linux', + }), + ).toBe('/opt/kopaya/resources/app/assets/icons/linux/icons/512x512.png'); }); });