更新饥荒

This commit is contained in:
2026-10-11 09:09:28 +08:00
parent d87ad60492
commit 3af4bc6b52
53 changed files with 12434 additions and 2733 deletions

View File

@@ -70,6 +70,46 @@ updater.init({
setQuitting: (v) => { isQuitting = v },
})
// ---------------------------------------------------------------------
// 屏幕模式:window 普通窗口 / windowFull 窗口全屏(最大化铺满工作区+隐藏菜单栏)/
// full 真全屏(覆盖任务栏)。渲染进程经 preload 的 setScreenMode 切换;
// 菜单「视图 → 全屏」(F11) 与 Esc 退全屏通过 enter/leave-full-screen 事件回同步。
// 模式持久化到 config.json,下次启动恢复。
// ---------------------------------------------------------------------
let screenMode = 'window'
let prevWindowed = 'window' // 从真全屏退出时回到的窗口模式
function applyWindowedMode(win, mode) {
if (!win || win.isDestroyed()) return
if (mode === 'windowFull') {
if (!win.isMaximized()) win.maximize()
win.setAutoHideMenuBar(true)
win.setMenuBarVisibility(false)
} else {
if (win.isMaximized()) win.unmaximize()
win.setAutoHideMenuBar(false)
win.setMenuBarVisibility(true)
}
}
function setScreenModeInMain(mode) {
if (!mainWin || mainWin.isDestroyed()) return { mode: screenMode }
if (mode === 'full') {
if (!mainWin.isFullScreen()) mainWin.setFullScreen(true)
screenMode = 'full'
} else {
if (mainWin.isFullScreen()) mainWin.setFullScreen(false)
prevWindowed = mode === 'windowFull' ? 'windowFull' : 'window'
screenMode = prevWindowed
applyWindowedMode(mainWin, prevWindowed)
}
writeCfg({ screenMode })
mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
return { mode: screenMode }
}
ipcMain.handle('nlg:set-screen-mode', (_e, mode) => setScreenModeInMain(mode === 'full' ? 'full' : mode === 'windowFull' ? 'windowFull' : 'window'))
// ---------------------------------------------------------------------
// 服务器设置窗口(极简内嵌页面,深色风格与主站一致)
// ---------------------------------------------------------------------
@@ -214,7 +254,7 @@ function buildMenu() {
{ label: '缩小', role: 'zoomOut' },
{ label: '实际大小', role: 'resetZoom' },
{ type: 'separator' },
{ label: '全屏', role: 'togglefullscreen' },
{ label: '全屏', role: 'togglefullscreen', accelerator: 'F11' },
],
},
{
@@ -264,15 +304,35 @@ function createWindow() {
},
})
mainWin.once('ready-to-show', () => {
if (cfg.winMax) mainWin.maximize()
// 恢复上次屏幕模式:full=真全屏;windowFull=窗口全屏(最大化+隐藏菜单栏)
if (cfg.screenMode === 'full') {
screenMode = 'full'
mainWin.setFullScreen(true)
} else {
screenMode = prevWindowed = cfg.screenMode === 'windowFull' ? 'windowFull' : 'window'
applyWindowedMode(mainWin, screenMode)
if (screenMode === 'window' && cfg.winMax) mainWin.maximize() // 普通窗口保留「最大化启动」记忆
}
mainWin.show()
// 启动后 3 秒静默检查一次更新(已是最新版不弹窗,发现新版本才提示)
setTimeout(() => { updater.checkUpdate(true).catch(() => {}) }, 3000)
})
// 原生全屏状态变化回同步(菜单 F11 / Esc 退出全屏时渲染层才能拿到正确状态)
mainWin.on('enter-full-screen', () => {
screenMode = 'full'
writeCfg({ screenMode })
if (!mainWin.isDestroyed()) mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
})
mainWin.on('leave-full-screen', () => {
screenMode = prevWindowed
applyWindowedMode(mainWin, prevWindowed)
writeCfg({ screenMode })
if (!mainWin.isDestroyed()) mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
})
// 点关闭:记住窗口状态并隐藏到托盘(冒烟模式 / 真正退出时直接关)
mainWin.on('close', (e) => {
try {
writeCfg({ winBounds: mainWin.getNormalBounds(), winMax: mainWin.isMaximized() })
writeCfg({ winBounds: mainWin.getNormalBounds(), winMax: mainWin.isMaximized(), screenMode })
} catch {}
if (!isQuitting && !SMOKE && tray) {
e.preventDefault()