mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-22 07:33:48 +01:00
Merge pull request #2780 from MartinFournier/feat/electron-store-winposition
Store Electron window position in user settings
This commit is contained in:
commit
e392e6d71f
@ -8,6 +8,7 @@ const api = require("./api-server");
|
||||
const cp = require("child_process");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const { windowTracker } = require("./windowTracker");
|
||||
const { fileURLToPath } = require("url");
|
||||
|
||||
const debug = process.argv.includes("--debug");
|
||||
@ -20,19 +21,29 @@ async function createWindow(killall) {
|
||||
icon = path.join(__dirname, 'icon.png');
|
||||
}
|
||||
|
||||
const tracker = windowTracker('main');
|
||||
const window = new BrowserWindow({
|
||||
icon,
|
||||
show: false,
|
||||
backgroundThrottling: false,
|
||||
backgroundColor: "#000000",
|
||||
title: 'Bitburner',
|
||||
x: tracker.state.x,
|
||||
y: tracker.state.y,
|
||||
width: tracker.state.width,
|
||||
height: tracker.state.height,
|
||||
minWidth: 600,
|
||||
minHeight: 400,
|
||||
webPreferences: {
|
||||
nativeWindowOpen: true,
|
||||
preload: path.join(__dirname, 'preload.js'),
|
||||
},
|
||||
});
|
||||
|
||||
setTimeout(() => tracker.track(window), 1000);
|
||||
if (tracker.state.isMaximized) window.maximize();
|
||||
|
||||
window.removeMenu();
|
||||
window.maximize();
|
||||
noScripts = killall ? { query: { noScripts: killall } } : {};
|
||||
window.loadFile("index.html", noScripts);
|
||||
window.show();
|
||||
|
63
electron/windowTracker.js
Normal file
63
electron/windowTracker.js
Normal file
@ -0,0 +1,63 @@
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||
const { screen } = require("electron");
|
||||
const log = require("electron-log");
|
||||
const debounce = require("lodash/debounce");
|
||||
const Config = require("electron-config");
|
||||
const config = new Config();
|
||||
|
||||
// https://stackoverflow.com/a/68627253
|
||||
const windowTracker = (windowName) => {
|
||||
let window, windowState;
|
||||
|
||||
const setBounds = () => {
|
||||
// Restore from appConfig
|
||||
if (config.has(`window.${windowName}`)) {
|
||||
windowState = config.get(`window.${windowName}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const size = screen.getPrimaryDisplay().workAreaSize;
|
||||
|
||||
// Default
|
||||
windowState = {
|
||||
x: undefined,
|
||||
y: undefined,
|
||||
width: size.width,
|
||||
height: size.height,
|
||||
isMaximized: true,
|
||||
};
|
||||
};
|
||||
|
||||
const saveState = debounce(() => {
|
||||
if (!windowState.isMaximized) {
|
||||
windowState = window.getBounds();
|
||||
}
|
||||
|
||||
windowState.isMaximized = window.isMaximized();
|
||||
log.silly(`Saving window.${windowName} to configs`);
|
||||
config.set(`window.${windowName}`, windowState);
|
||||
log.silly(windowState);
|
||||
}, 1000);
|
||||
|
||||
const track = (win) => {
|
||||
window = win;
|
||||
['resize', 'move', 'close'].forEach((event) => {
|
||||
win.on(event, saveState);
|
||||
});
|
||||
};
|
||||
|
||||
setBounds();
|
||||
|
||||
return {
|
||||
state: {
|
||||
x: windowState.x,
|
||||
y: windowState.y,
|
||||
width: windowState.width,
|
||||
height: windowState.height,
|
||||
isMaximized: windowState.isMaximized,
|
||||
},
|
||||
track,
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = { windowTracker };
|
Loading…
Reference in New Issue
Block a user