// ============================================================ // 主进程 Logo 自适应工具 // 根据平台返回正确的图标路径,处理 .ico / .png / .icns 格式差异 // ============================================================ import path from 'node:path'; import { isMacOS, isWindows } from './platform'; // Logo 资源目录(相对于构建后的 dist-electron 目录或开发时的 electron/ 目录) // 开发时 app.getAppPath() 指向项目根目录 // 生产时指向 app.asar 所在目录 /** Logo 目录在项目中的相对路径 */ const LOGO_DIR = 'src/assets/logo'; /** * 获取 Logo 资源目录的绝对路径 * @param appPath - Electron app.getAppPath() 的返回值 */ export function getLogoDir(appPath: string): string { return path.join(appPath, LOGO_DIR); } /** * 按平台获取窗口图标路径 * * 平台格式要求: * Windows → .ico(支持多尺寸) * macOS → .icns(首选)或 .png(回退) * Linux → .png * * @param appPath - Electron app.getAppPath() * @returns 图标文件的绝对路径 */ export function getWindowIconPath(appPath: string): string { const logoDir = path.join(appPath, LOGO_DIR); if (isWindows()) { // Windows 首选 .ico return path.join(logoDir, 'heixiu.ico'); } if (isMacOS()) { return path.join(logoDir, 'heixiu.icns'); } // Linux 使用 .png return path.join(logoDir, 'HX.png'); } /** * 按平台获取系统托盘图标路径 * 托盘图标通常用 .png(跨平台通用),且尺寸较小 * * @param appPath - Electron app.getAppPath() * @returns 托盘图标绝对路径 */ export function getTrayIconPath(appPath: string): string { const logoDir = path.join(appPath, LOGO_DIR); if (isWindows()) { // Windows 托盘可用 .ico 或小尺寸 .png return path.join(logoDir, 'heixiu.ico'); } // macOS / Linux 托盘用 .png return path.join(logoDir, 'HX.png'); } /** * 按平台获取应用安装包图标路径 * electron-builder 打包时使用,各平台格式不同: * Windows → .ico * macOS → .icns * Linux → .png(通常 256x256 或 512x512) * * @param appPath - 应用根目录路径 * @returns 安装包图标的绝对路径 */ export function getInstallerIconPath(appPath: string): string { const logoDir = path.join(appPath, LOGO_DIR); if (isWindows()) { return path.join(logoDir, 'heixiu.ico'); } if (isMacOS()) { return path.join(logoDir, 'heixiu.icns'); } // Linux return path.join(logoDir, 'HX.png'); } /** * 获取通用 PNG Logo(不区分平台,用于 About 对话框等) */ export function getPngLogoPath(appPath: string): string { return path.join(appPath, LOGO_DIR, 'HX.png'); }