diff --git a/package.json b/package.json index 9fb5ec26..cc7cf2fe 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "knip": "knip", "typecheck": "tsrs --noEmit && tsrs -p tsconfig.node.json --noEmit && tsrs -p perf --noEmit && tsrs -p scripts --noEmit", "gen:bindings": "cargo test -p openidea --test export_bindings", + "gen:windows-icons": "node scripts/gen-windows-icons.ts", "gen:angular-grammar": "lezer-generator src/editor/core/cm/angular/angular.grammar --typeScript -o src/editor/core/cm/angular/parser.ts", "gen:theme-docs": "node scripts/theme/gen-docs.ts", "theme:import-intellij": "node scripts/theme/import-intellij-theme.ts", diff --git a/scripts/gen-windows-icons.ts b/scripts/gen-windows-icons.ts new file mode 100644 index 00000000..5632bf91 --- /dev/null +++ b/scripts/gen-windows-icons.ts @@ -0,0 +1,35 @@ +import { spawnSync } from "node:child_process"; +import { copyFileSync, mkdtempSync, realpathSync, rmSync } from "node:fs"; +import { createRequire } from "node:module"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = fileURLToPath(new URL("..", import.meta.url)); +const icons = join(root, "src-tauri", "icons"); +const tempRoot = realpathSync(tmpdir()); +const output = mkdtempSync(join(tempRoot, "openidea-windows-icons-")); +function removeOutput() { + // Only remove the unique directory this invocation created inside the system temp directory. + if (dirname(realpathSync(output)) !== tempRoot) throw new Error("Unexpected icon output directory"); + rmSync(output, { recursive: true, force: true }); +} +try { + const cli = createRequire(import.meta.url).resolve("@tauri-apps/cli/tauri.js"); + const result = spawnSync( + process.execPath, + [cli, "icon", join(icons, "source", "openidea-windows.svg"), "--output", output], + { cwd: root, stdio: "inherit" }, + ); + if (result.error) throw result.error; + if (result.status !== 0) throw new Error(`Icon generation failed (${result.status})`); + for (const name of [ + "icon.ico", + "StoreLogo.png", + ...[30, 44, 71, 89, 107, 142, 150, 284, 310].map((size) => `Square${size}x${size}Logo.png`), + ]) { + copyFileSync(join(output, name), join(icons, name)); + } +} finally { + removeOutput(); +} diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png index bf3e0021..f682ed3a 100644 Binary files a/src-tauri/icons/Square107x107Logo.png and b/src-tauri/icons/Square107x107Logo.png differ diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png index 94e54463..11389ea3 100644 Binary files a/src-tauri/icons/Square142x142Logo.png and b/src-tauri/icons/Square142x142Logo.png differ diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png index cf09c22c..2cdff492 100644 Binary files a/src-tauri/icons/Square150x150Logo.png and b/src-tauri/icons/Square150x150Logo.png differ diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png index 99ca0f55..29764c1f 100644 Binary files a/src-tauri/icons/Square284x284Logo.png and b/src-tauri/icons/Square284x284Logo.png differ diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png index 1a4981ff..b2e44011 100644 Binary files a/src-tauri/icons/Square30x30Logo.png and b/src-tauri/icons/Square30x30Logo.png differ diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png index 020ccca5..e135f172 100644 Binary files a/src-tauri/icons/Square310x310Logo.png and b/src-tauri/icons/Square310x310Logo.png differ diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png index 3a6f2782..18862ba5 100644 Binary files a/src-tauri/icons/Square44x44Logo.png and b/src-tauri/icons/Square44x44Logo.png differ diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png index 18c65d3c..73157ae9 100644 Binary files a/src-tauri/icons/Square71x71Logo.png and b/src-tauri/icons/Square71x71Logo.png differ diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png index adfdb188..b88675b3 100644 Binary files a/src-tauri/icons/Square89x89Logo.png and b/src-tauri/icons/Square89x89Logo.png differ diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png index 3883abaf..d2788560 100644 Binary files a/src-tauri/icons/StoreLogo.png and b/src-tauri/icons/StoreLogo.png differ diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico index 853d994f..825477cd 100644 Binary files a/src-tauri/icons/icon.ico and b/src-tauri/icons/icon.ico differ diff --git a/src-tauri/icons/source/openidea-windows.svg b/src-tauri/icons/source/openidea-windows.svg new file mode 100644 index 00000000..b1ce4628 --- /dev/null +++ b/src-tauri/icons/source/openidea-windows.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +