Merge pull request #3537 from etiktin/make_BrowserWindow_options_optional

Make BrowserWindow options argument optional
This commit is contained in:
Cheng Zhao 2015-11-23 16:56:30 +08:00
commit 634fef2508
4 changed files with 79 additions and 48 deletions

View file

@ -261,13 +261,23 @@ void Window::OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) {
#endif
// static
mate::Wrappable* Window::New(v8::Isolate* isolate,
const mate::Dictionary& options) {
mate::Wrappable* Window::New(v8::Isolate* isolate, mate::Arguments* args) {
if (!Browser::Get()->is_ready()) {
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Cannot create BrowserWindow before app is ready")));
return nullptr;
}
if (args->Length() > 1) {
args->ThrowError();
return nullptr;
}
mate::Dictionary options;
if (!(args->Length() == 1 && args->GetNext(&options))) {
options = mate::Dictionary::CreateEmpty(isolate);
}
return new Window(isolate, options);
}

View file

@ -38,8 +38,7 @@ class WebContents;
class Window : public mate::TrackableObject<Window>,
public NativeWindowObserver {
public:
static mate::Wrappable* New(v8::Isolate* isolate,
const mate::Dictionary& options);
static mate::Wrappable* New(v8::Isolate* isolate, mate::Arguments* args);
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);

View file

@ -25,49 +25,58 @@ You can also create a window without chrome by using
It creates a new `BrowserWindow` with native properties as set by the `options`.
### `new BrowserWindow(options)`
### `new BrowserWindow([options])`
`options` Object, properties:
`options` Object (optional), properties:
* `width` Integer - Window's width.
* `height` Integer - Window's height.
* `x` Integer - Window's left offset from screen.
* `y` Integer - Window's top offset from screen.
* `width` Integer - Window's width in pixels. Default is `800`.
* `height` Integer - Window's height in pixels. Default is `600`.
* `x` Integer - Window's left offset from screen. Default is to center the
window.
* `y` Integer - Window's top offset from screen. Default is to center the
window.
* `useContentSize` Boolean - The `width` and `height` would be used as web
page's size, which means the actual window's size will include window
frame's size and be slightly larger.
frame's size and be slightly larger. Default is `false`.
* `center` Boolean - Show window in the center of the screen.
* `minWidth` Integer - Window's minimum width.
* `minHeight` Integer - Window's minimum height.
* `maxWidth` Integer - Window's maximum width.
* `maxHeight` Integer - Window's maximum height.
* `resizable` Boolean - Whether window is resizable.
* `minWidth` Integer - Window's minimum width. Default is `0`.
* `minHeight` Integer - Window's minimum height. Default is `0`.
* `maxWidth` Integer - Window's maximum width. Default is no limit.
* `maxHeight` Integer - Window's maximum height. Default is no limit.
* `resizable` Boolean - Whether window is resizable. Default is `true`.
* `alwaysOnTop` Boolean - Whether the window should always stay on top of
other windows.
other windows. Default is `false`.
* `fullscreen` Boolean - Whether the window should show in fullscreen. When
set to `false` the fullscreen button will be hidden or disabled on OS X.
* `skipTaskbar` Boolean - Whether to show the window in taskbar.
* `kiosk` Boolean - The kiosk mode.
* `title` String - Default window title.
Default is `false`.
* `skipTaskbar` Boolean - Whether to show the window in taskbar. Default is
`false`.
* `kiosk` Boolean - The kiosk mode. Default is `false`.
* `title` String - Default window title. Default is `"Electron"`.
* `icon` [NativeImage](native-image.md) - The window icon, when omitted on
Windows the executable's icon would be used as window icon.
* `show` Boolean - Whether window should be shown when created.
* `show` Boolean - Whether window should be shown when created. Default is
`true`.
* `frame` Boolean - Specify `false` to create a
[Frameless Window](frameless-window.md).
[Frameless Window](frameless-window.md). Default is `true`.
* `acceptFirstMouse` Boolean - Whether the web view accepts a single
mouse-down event that simultaneously activates the window.
* `disableAutoHideCursor` Boolean - Whether to hide cursor when typing.
mouse-down event that simultaneously activates the window. Default is `false`.
* `disableAutoHideCursor` Boolean - Whether to hide cursor when typing. Default
is `false`.
* `autoHideMenuBar` Boolean - Auto hide the menu bar unless the `Alt`
key is pressed.
key is pressed. Default is `false`.
* `enableLargerThanScreen` Boolean - Enable the window to be resized larger
than screen.
than screen. Default is `false`.
* `backgroundColor` String - Window's background color as Hexadecimal value,
like `#66CD00` or `#FFF`. This is only implemented on Linux and Windows.
Default is `#000` (black).
* `darkTheme` Boolean - Forces using dark theme for the window, only works on
some GTK+3 desktop environments.
some GTK+3 desktop environments. Default is `false`.
* `transparent` Boolean - Makes the window [transparent](frameless-window.md).
Default is `false`.
* `type` String - Specifies the type of the window, which applies
additional platform-specific properties.
additional platform-specific properties. By default it's undefined and you'll
get a regular app window. Supported values:
* On Linux, possible types are `desktop`, `dock`, `toolbar`, `splash`,
`notification`.
* On OS X, possible types are `desktop`, `textured`. The `textured` type adds
@ -79,7 +88,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
* `titleBarStyle` String, OS X - specifies the style of window title bar.
This option is supported on OS X 10.10 Yosemite and newer. There are three
possible values:
* `default` or not specified results in the standard gray opaque Mac title
* `default` or not specified, results in the standard gray opaque Mac title
bar.
* `hidden` results in a hidden title bar and a full size content window, yet
the title bar still has the standard window controls ("traffic lights") in
@ -104,33 +113,38 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
`partition`, multiple pages can share the same session. If the `partition`
is unset then default session of the app will be used.
* `zoomFactor` Number - The default zoom factor of the page, `3.0` represents
`300%`.
* `javascript` Boolean
`300%`. Default is `1.0`.
* `javascript` Boolean - Enables JavaScript support. Default is `true`.
* `webSecurity` Boolean - When setting `false`, it will disable the
same-origin policy (Usually using testing websites by people), and set
`allowDisplayingInsecureContent` and `allowRunningInsecureContent` to
`true` if these two options are not set by user.
`true` if these two options are not set by user. Default is `true`.
* `allowDisplayingInsecureContent` Boolean - Allow an https page to display
content like images from http URLs.
content like images from http URLs. Default is `false`.
* `allowRunningInsecureContent` Boolean - Allow a https page to run
JavaScript, CSS or plugins from http URLs.
* `images` Boolean
* `java` Boolean
* `textAreasAreResizable` Boolean
* `webgl` Boolean
* `webaudio` Boolean
* `plugins` Boolean - Whether plugins should be enabled.
* `experimentalFeatures` Boolean
* `experimentalCanvasFeatures` Boolean
* `overlayScrollbars` Boolean
* `overlayFullscreenVideo` Boolean
* `sharedWorker` Boolean
* `directWrite` Boolean - Whether the DirectWrite font rendering system on
Windows is enabled.
JavaScript, CSS or plugins from http URLs. Default is `false`.
* `images` Boolean - Enables image support. Default is `true`.
* `java` Boolean - Enables Java support. Default is `false`.
* `textAreasAreResizable` Boolean - Make TextArea elements resizable. Default
is `true`.
* `webgl` Boolean - Enables WebGL support. Default is `true`.
* `webaudio` Boolean - Enables WebAudio support. Default is `true`.
* `plugins` Boolean - Whether plugins should be enabled. Default is `false`.
* `experimentalFeatures` Boolean - Enables Chromium's experimental features.
Default is `false`.
* `experimentalCanvasFeatures` Boolean - Enables Chromium's experimental
canvas features. Default is `false`.
* `overlayScrollbars` Boolean - Enables overlay scrollbars. Default is
`false`.
* `overlayFullscreenVideo` Boolean - Enables overlay fullscreen video. Default
is `false`
* `sharedWorker` Boolean - Enables Shared Worker support. Default is `false`.
* `directWrite` Boolean - Enables DirectWrite font rendering system on
Windows. Default is `true`.
* `pageVisibility` Boolean - Page would be forced to be always in visible
or hidden state once set, instead of reflecting current window's
visibility. Users can set it to `true` to prevent throttling of DOM
timers.
timers. Default is `false`.
## Events

View file

@ -322,3 +322,11 @@ describe 'browser-window module', ->
done()
w.loadURL "file://#{fixtures}/pages/save_page/index.html"
describe 'BrowserWindow options argument is optional', ->
it 'should create a window with default size (800x600)', ->
w.destroy()
w = new BrowserWindow()
size = w.getSize()
assert.equal size[0], 800
assert.equal size[1], 600