From 9f8276424445b2a2983ef4f8089bb7fa5b594aec Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 13 Nov 2018 08:34:53 -0800 Subject: [PATCH] feat: allow partial setting of window bounds --- docs/api/browser-window.md | 13 ++++++++++++- lib/browser/api/browser-window.js | 9 +++++++++ spec/api-browser-window-spec.js | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index d32fcc9925ba6..e3062d161e3b4 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -895,7 +895,18 @@ Closes the currently open [Quick Look][quick-look] panel. * `bounds` [Rectangle](structures/rectangle.md) * `animate` Boolean (optional) _macOS_ -Resizes and moves the window to the supplied bounds +Resizes and moves the window to the supplied bounds. Any properties that are not supplied will default to their current values. + +```javascript +const { BrowserWindow } = require('electron') +const win = new BrowserWindow() + // set all bounds properties +win.setBounds({ x: 440, y: 225, width: 800, height: 600 }) + // set a single bounds property +win.setBounds({ width: 200 }) + // { x: 440, y: 225, width: 200, height: 600 } +console.log(win.getBounds()) +``` #### `win.getBounds()` diff --git a/lib/browser/api/browser-window.js b/lib/browser/api/browser-window.js index a4dd5ec738695..7fdbf8ef90cf3 100644 --- a/lib/browser/api/browser-window.js +++ b/lib/browser/api/browser-window.js @@ -18,6 +18,15 @@ BrowserWindow.prototype._init = function () { // Create WebContentsView. this.setContentView(new WebContentsView(this.webContents)) + const nativeSetBounds = this.setBounds + this.setBounds = (bounds, ...opts) => { + bounds = { + ...this.getBounds(), + ...bounds + } + nativeSetBounds.call(this, bounds, ...opts) + } + // Make new windows requested by links behave like "window.open" this.webContents.on('-new-window', (event, url, frameName, disposition, additionalFeatures, postData, diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index ee5281e99d9ea..88344fe8178e8 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -524,6 +524,25 @@ describe('BrowserWindow module', () => { }) }) + describe('BrowserWindow.setBounds(bounds[, animate])', () => { + it('sets the window bounds with full bounds', () => { + const fullBounds = { x: 440, y: 225, width: 500, height: 400 } + w.setBounds(fullBounds) + assertBoundsEqual(w.getBounds(), fullBounds) + }) + + it('sets the window bounds with partial bounds', () => { + const fullBounds = { x: 440, y: 225, width: 500, height: 400 } + w.setBounds(fullBounds) + + const boundsUpdate = { width: 200 } + w.setBounds(boundsUpdate) + + const expectedBounds = Object.assign(fullBounds, boundsUpdate) + assertBoundsEqual(w.getBounds(), expectedBounds) + }) + }) + describe('BrowserWindow.setSize(width, height)', () => { it('sets the window size', async () => { const size = [300, 400]