Files
Scoreboard/console/main/tray-icon.js
T

36 lines
1.7 KiB
JavaScript

'use strict'
const fs = require('fs')
const path = require('path')
const { app, nativeImage } = require('electron')
// 托盘图标:优先用部署包里的 scoreboard.png(换图标不用重新打包),
// 找不到时回落到内嵌 base64,保证任何情况下托盘都有图标。
const ICON_PNG_BASE64 =
'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABUklEQVR42u2XwUdEURTG5z9JSholJY2SklJSf0+0iKFFtIhoES0iWkSLiBaRDKNSKU2GjCRGEkkSSZsvb3GfnHPnzTm382Y1P36b9x33fKv37stkmiiYLf1AovnimatvhPjvxdMXX7AwaPnU6ScsVS2fLH4gDUXLJwrvSNO6BcaP3pCmicvHDl/RCGsWGD14QSP0Lh/Zf4aVFN8MKzC89wQrKb4ZVmBotworKb4ZVmBw5xFWUnwzrEBu+wFWUnwzrMDA1j00UqSZkxXo36xAI0WaOVmBvo07aKRIMycr0LtehkaKNHOyAj1rt9BIkWZO79uwe/UGUinSLLLmt6Br5Rp/pVhkkYlfxOzyJZwUi6zufaBz6RxOikUmuhV1LJ4hkuKeh2aqe2F7/oQdFD1zarOgmzE9qG2hGKvJgv8L6EGt84VYTWZWoGXuOFaTNX9qk/gFLmHiXP3t+GEAAAAASUVORK5CYII='
// 候选顺序:exe 同级(部署包)→ 源码目录(开发态)→ resources 目录
function resolveIconPath() {
const candidates = [
path.join(path.dirname(app.getPath('exe')), 'scoreboard.png'),
path.join(__dirname, '..', 'scoreboard.png'),
path.join(process.resourcesPath || '', 'scoreboard.png'),
]
return candidates.find((candidate) => candidate && fs.existsSync(candidate)) || null
}
function createTrayIcon() {
const file = resolveIconPath()
if (file) {
const image = nativeImage.createFromPath(file)
if (!image.isEmpty()) {
// Windows 托盘按 16px 显示,缩放交给系统会更模糊,这里直接给 16px
return image.resize({ width: 16, height: 16 })
}
}
const fallback = nativeImage.createFromDataURL(`data:image/png;base64,${ICON_PNG_BASE64}`)
return fallback.resize({ width: 16, height: 16 })
}
module.exports = { createTrayIcon }