diff --git a/src/config.d.ts b/src/config.d.ts index d7a89db..d5f0cde 100644 --- a/src/config.d.ts +++ b/src/config.d.ts @@ -6,6 +6,10 @@ declare type DesktopConfig = { hardwareAcceleration: boolean; discordRpc: boolean; windowState: { + x: number; + y: number; + width: number; + height: number; isMaximised: boolean; }; }; diff --git a/src/native/config.ts b/src/native/config.ts index 7021be3..35fb0ab 100644 --- a/src/native/config.ts +++ b/src/native/config.ts @@ -28,18 +28,18 @@ const schema = { windowState: { type: "object", properties: { - // x: { - // type: 'number' - // } as JSONSchema.Number, - // y: { - // type: 'number' - // } as JSONSchema.Number, - // width: { - // type: 'number' - // } as JSONSchema.Number, - // height: { - // type: 'number' - // } as JSONSchema.Number, + x: { + type: 'number' + } as JSONSchema.Number, + y: { + type: 'number' + } as JSONSchema.Number, + width: { + type: 'number' + } as JSONSchema.Number, + height: { + type: 'number' + } as JSONSchema.Number, isMaximised: { type: "boolean", } as JSONSchema.Boolean, @@ -57,6 +57,10 @@ const store = new Store({ hardwareAcceleration: true, discordRpc: true, windowState: { + x: 0, + y: 0, + width: 0, + height: 0, isMaximised: false, }, } as DesktopConfig, diff --git a/src/native/window.ts b/src/native/window.ts index 571e504..450124e 100644 --- a/src/native/window.ts +++ b/src/native/window.ts @@ -62,6 +62,16 @@ export function createMainWindow() { mainWindow.maximize(); } + // restore last position if it was moved previously + if(config.windowState.x > 0 || config.windowState.y > 0) { + mainWindow.setPosition(config.windowState.x ?? 0, config.windowState.y ?? 0); + } + + // restore last size if it was resized previously + if(config.windowState.width > 0 && config.windowState.height > 0) { + mainWindow.setSize(config.windowState.width ?? 1280, config.windowState.height ?? 720); + } + // load the entrypoint mainWindow.loadURL(BUILD_URL.toString()); @@ -80,12 +90,18 @@ export function createMainWindow() { // keep track of window state function generateState() { config.windowState = { + x: mainWindow.getPosition()[0], + y: mainWindow.getPosition()[1], + width: mainWindow.getSize()[0], + height: mainWindow.getSize()[1], isMaximised: mainWindow.isMaximized(), }; } mainWindow.on("maximize", generateState); mainWindow.on("unmaximize", generateState); + mainWindow.on("moved", generateState); + mainWindow.on("resized", generateState); // rebind zoom controls to be more sensible mainWindow.webContents.on("before-input-event", (event, input) => {