diff --git a/ElectronNET.API/BrowserWindow.cs b/ElectronNET.API/BrowserWindow.cs
index 55fdaa8..790f0f0 100644
--- a/ElectronNET.API/BrowserWindow.cs
+++ b/ElectronNET.API/BrowserWindow.cs
@@ -1,4 +1,10 @@
-namespace ElectronNET.API
+using ElectronNET.API.Entities;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Serialization;
+using System.Threading.Tasks;
+
+namespace ElectronNET.API
{
public class BrowserWindow
{
@@ -8,9 +14,599 @@
Id = id;
}
+ ///
+ /// Force closing the window, the unload and beforeunload event won’t be
+ /// emitted for the web page, and close event will also not be emitted
+ /// for this window, but it guarantees the closed event will be emitted.
+ ///
+ public void Destroy()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-destroy", Id);
+ }
+
+ ///
+ /// Try to close the window. This has the same effect as a user manually
+ /// clicking the close button of the window. The web page may cancel the close though.
+ ///
+ public void Close()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-close", Id);
+ }
+
+ ///
+ /// Focuses on the window.
+ ///
+ public void Focus()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-focus", Id);
+ }
+
+ ///
+ /// Removes focus from the window.
+ ///
+ public void Blur()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-blur", Id);
+ }
+
+ ///
+ /// Whether the window is focused.
+ ///
+ ///
+ public Task IsFocusedAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isFocused-completed", (isFocused) => {
+ BridgeConnector.Socket.Off("browserWindow-isFocused-completed");
+
+ taskCompletionSource.SetResult((bool)isFocused);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isFocused", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Whether the window is destroyed.
+ ///
+ ///
+ public Task IsDestroyedAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isDestroyed-completed", (isDestroyed) => {
+ BridgeConnector.Socket.Off("browserWindow-isDestroyed-completed");
+
+ taskCompletionSource.SetResult((bool)isDestroyed);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isDestroyed", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Shows and gives focus to the window.
+ ///
+ public void Show()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-show", Id);
+ }
+
+ ///
+ /// Shows the window but doesn’t focus on it.
+ ///
+ public void ShowInactive()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-showInactive", Id);
+ }
+
+ ///
+ /// Hides the window.
+ ///
+ public void Hide()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-hide", Id);
+ }
+
+ ///
+ /// Whether the window is visible to the user.
+ ///
+ ///
+ public Task IsVisibleAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isVisible-completed", (isVisible) => {
+ BridgeConnector.Socket.Off("browserWindow-isVisible-completed");
+
+ taskCompletionSource.SetResult((bool)isVisible);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isVisible", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Whether current window is a modal window.
+ ///
+ ///
+ public Task IsModalAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isModal-completed", (isModal) => {
+ BridgeConnector.Socket.Off("browserWindow-isModal-completed");
+
+ taskCompletionSource.SetResult((bool)isModal);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isModal", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Maximizes the window. This will also show (but not focus) the window if it isn’t being displayed already.
+ ///
+ public void Maximize()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-maximize", Id);
+ }
+
+ ///
+ /// Unmaximizes the window.
+ ///
+ public void Unmaximize()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-unmaximize", Id);
+ }
+
+ ///
+ /// Whether the window is maximized.
+ ///
+ ///
+ public Task IsMaximizedAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isMaximized-completed", (isMaximized) => {
+ BridgeConnector.Socket.Off("browserWindow-isMaximized-completed");
+
+ taskCompletionSource.SetResult((bool)isMaximized);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isMaximized", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Minimizes the window. On some platforms the minimized window will be shown in the Dock.
+ ///
public void Minimize()
{
BridgeConnector.Socket.Emit("browserWindow-minimize", Id);
}
+
+ ///
+ /// Restores the window from minimized state to its previous state.
+ ///
+ public void Restore()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-restore", Id);
+ }
+
+ ///
+ /// Whether the window is minimized.
+ ///
+ ///
+ public Task IsMinimizedAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isMinimized-completed", (isMinimized) => {
+ BridgeConnector.Socket.Off("browserWindow-isMinimized-completed");
+
+ taskCompletionSource.SetResult((bool)isMinimized);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isMinimized", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets whether the window should be in fullscreen mode.
+ ///
+ public void SetFullScreen(bool flag)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setFullScreen", Id, flag);
+ }
+
+ ///
+ /// Whether the window is in fullscreen mode.
+ ///
+ ///
+ public Task IsFullScreenAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isFullScreen-completed", (isFullScreen) => {
+ BridgeConnector.Socket.Off("browserWindow-isFullScreen-completed");
+
+ taskCompletionSource.SetResult((bool)isFullScreen);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isFullScreen", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space,
+ /// specified in pixels, not included within the aspect ratio calculations. This API already takes into
+ /// account the difference between a window’s size and its content size.
+ ///
+ /// Consider a normal window with an HD video player and associated controls.Perhaps there are 15 pixels
+ /// of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below
+ /// the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within
+ /// the player itself we would call this function with arguments of 16/9 and[40, 50]. The second argument
+ /// doesn’t care where the extra width and height are within the content view–only that they exist. Just
+ /// sum any extra width and height areas you have within the overall content view.
+ ///
+ /// The aspect ratio to maintain for some portion of the content view.
+ /// The extra size not to be included while maintaining the aspect ratio.
+ public void SetAspectRatio(int aspectRatio, Size extraSize)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setAspectRatio", Id, aspectRatio, JObject.FromObject(extraSize, _jsonSerializer));
+ }
+
+ ///
+ /// Uses Quick Look to preview a file at a given path.
+ ///
+ /// The absolute path to the file to preview with QuickLook. This is important as
+ /// Quick Look uses the file name and file extension on the path to determine the content type of the
+ /// file to open.
+ public void PreviewFile(string path)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-previewFile", Id, path);
+ }
+
+ ///
+ /// Uses Quick Look to preview a file at a given path.
+ ///
+ /// The absolute path to the file to preview with QuickLook. This is important as
+ /// Quick Look uses the file name and file extension on the path to determine the content type of the
+ /// file to open.
+ /// The name of the file to display on the Quick Look modal view. This is
+ /// purely visual and does not affect the content type of the file. Defaults to path.
+ public void PreviewFile(string path, string displayname)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-previewFile", Id, path, displayname);
+ }
+
+ ///
+ /// Closes the currently open Quick Look panel.
+ ///
+ public void CloseFilePreview()
+ {
+ BridgeConnector.Socket.Emit("browserWindow-closeFilePreview", Id);
+ }
+
+ ///
+ /// Resizes and moves the window to the supplied bounds
+ ///
+ ///
+ public void SetBounds(Rectangle bounds)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setBounds", Id, JObject.FromObject(bounds, _jsonSerializer));
+ }
+
+ ///
+ /// Resizes and moves the window to the supplied bounds
+ ///
+ ///
+ ///
+ public void SetBounds(Rectangle bounds, bool animate)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate);
+ }
+
+ public Task GetBoundsAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getBounds-completed", (getBounds) => {
+ BridgeConnector.Socket.Off("browserWindow-getBounds-completed");
+
+ taskCompletionSource.SetResult(((JObject)getBounds).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getBounds", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Resizes and moves the window’s client area (e.g. the web page) to the supplied bounds.
+ ///
+ ///
+ public void SetContentBounds(Rectangle bounds)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer));
+ }
+
+ ///
+ /// Resizes and moves the window’s client area (e.g. the web page) to the supplied bounds.
+ ///
+ ///
+ ///
+ public void SetContentBounds(Rectangle bounds, bool animate)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setContentBounds", Id, JObject.FromObject(bounds, _jsonSerializer), animate);
+ }
+
+ public Task GetContentBoundsAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getContentBounds-completed", (getContentBounds) => {
+ BridgeConnector.Socket.Off("browserWindow-getContentBounds-completed");
+
+ taskCompletionSource.SetResult(((JObject)getContentBounds).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getContentBounds", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Resizes the window to width and height.
+ ///
+ ///
+ ///
+ ///
+ public void SetSize(int width, int height)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setSize", Id, width, height);
+ }
+
+ ///
+ /// Resizes the window to width and height.
+ ///
+ ///
+ ///
+ ///
+ public void SetSize(int width, int height, bool animate)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setSize", Id, width, height, animate);
+ }
+
+ ///
+ /// Contains the window’s width and height.
+ ///
+ ///
+ public Task GetSizeAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getSize-completed", (size) => {
+ BridgeConnector.Socket.Off("browserWindow-getSize-completed");
+
+ taskCompletionSource.SetResult(((JArray)size).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getSize", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Resizes the window’s client area (e.g. the web page) to width and height.
+ ///
+ ///
+ ///
+ ///
+ public void SetContentSize(int width, int height)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setContentSize", Id, width, height);
+ }
+
+ ///
+ /// Resizes the window’s client area (e.g. the web page) to width and height.
+ ///
+ ///
+ ///
+ ///
+ public void SetContentSize(int width, int height, bool animate)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setContentSize", Id, width, height, animate);
+ }
+
+ ///
+ /// Contains the window’s client area’s width and height.
+ ///
+ ///
+ public Task GetContentSizeAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getContentSize-completed", (size) => {
+ BridgeConnector.Socket.Off("browserWindow-getContentSize-completed");
+
+ taskCompletionSource.SetResult(((JArray)size).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getContentSize", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets the minimum size of window to width and height.
+ ///
+ ///
+ ///
+ public void SetMinimumSize(int width, int height)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setMinimumSize", Id, width, height);
+ }
+
+ ///
+ /// Contains the window’s minimum width and height.
+ ///
+ ///
+ public Task GetMinimumSizeAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getMinimumSize-completed", (size) => {
+ BridgeConnector.Socket.Off("browserWindow-getMinimumSize-completed");
+
+ taskCompletionSource.SetResult(((JArray)size).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getMinimumSize", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets the maximum size of window to width and height.
+ ///
+ ///
+ ///
+ public void SetMaximumSize(int width, int height)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setMaximumSize", Id, width, height);
+ }
+
+ ///
+ /// Contains the window’s maximum width and height.
+ ///
+ ///
+ public Task GetMaximumSizeAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-getMaximumSize-completed", (size) => {
+ BridgeConnector.Socket.Off("browserWindow-getMaximumSize-completed");
+
+ taskCompletionSource.SetResult(((JArray)size).ToObject());
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-getMaximumSize", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets whether the window can be manually resized by user.
+ ///
+ ///
+ public void SetResizable(bool resizable)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setResizable", Id, resizable);
+ }
+
+ ///
+ /// Whether the window can be manually resized by user.
+ ///
+ ///
+ public Task IsResizableAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isResizable-completed", (resizable) => {
+ BridgeConnector.Socket.Off("browserWindow-isResizable-completed");
+
+ taskCompletionSource.SetResult((bool)resizable);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isResizable", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets whether the window can be moved by user. On Linux does nothing.
+ ///
+ ///
+ public void SetMovable(bool movable)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setMovable", Id, movable);
+ }
+
+ ///
+ /// Whether the window can be moved by user.
+ ///
+ /// On Linux always returns true.
+ ///
+ /// On Linux always returns true.
+ public Task IsMovableAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isMovable-completed", (movable) => {
+ BridgeConnector.Socket.Off("browserWindow-isMovable-completed");
+
+ taskCompletionSource.SetResult((bool)movable);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isMovable", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets whether the window can be manually minimized by user. On Linux does nothing.
+ ///
+ ///
+ public void SetMinimizable(bool minimizable)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setMinimizable", Id, minimizable);
+ }
+
+ ///
+ /// Whether the window can be manually minimized by user.
+ ///
+ /// On Linux always returns true.
+ ///
+ /// On Linux always returns true.
+ public Task IsMinimizableAsync()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+
+ BridgeConnector.Socket.On("browserWindow-isMinimizable-completed", (minimizable) => {
+ BridgeConnector.Socket.Off("browserWindow-isMinimizable-completed");
+
+ taskCompletionSource.SetResult((bool)minimizable);
+ });
+
+ BridgeConnector.Socket.Emit("browserWindow-isMinimizable", Id);
+
+ return taskCompletionSource.Task;
+ }
+
+ ///
+ /// Sets whether the window can be manually maximized by user. On Linux does nothing.
+ ///
+ ///
+ public void SetMaximizable(bool maximizable)
+ {
+ BridgeConnector.Socket.Emit("browserWindow-setMaximizable", Id, maximizable);
+ }
+
+ private JsonSerializer _jsonSerializer = new JsonSerializer()
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver(),
+ NullValueHandling = NullValueHandling.Ignore,
+ DefaultValueHandling = DefaultValueHandling.Ignore
+ };
}
}
diff --git a/ElectronNET.API/Entities/BrowserWindowConstructorOptions.cs b/ElectronNET.API/Entities/BrowserWindowConstructorOptions.cs
deleted file mode 100644
index 2e6f805..0000000
--- a/ElectronNET.API/Entities/BrowserWindowConstructorOptions.cs
+++ /dev/null
@@ -1,244 +0,0 @@
-namespace ElectronNET.API.Entities
-{
- public class BrowserWindowConstructorOptions
- {
- ///
- /// Window's width in pixels. Default is 800.
- ///
- public int Width { get; set; }
-
- ///
- /// Window's height in pixels. Default is 600.
- ///
- public int Height { get; set; }
-
- ///
- /// ( if y is used) Window's left offset from screen. Default is to center the
- /// window.
- ///
- public int X { get; set; }
-
- ///
- /// ( if x is used) Window's top offset from screen. Default is to center the
- /// window.
- ///
- public int Y { get; set; }
-
- ///
- /// 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.Default
- /// is false.
- ///
- public bool UseContentSize { get; set; }
-
- ///
- /// Show window in the center of the screen.
- ///
- public bool Center { get; set; }
-
- ///
- /// Window's minimum width. Default is 0.
- ///
- public int MinWidth { get; set; }
-
- ///
- /// Window's minimum height. Default is 0.
- ///
- public int MinHeight { get; set; }
-
- ///
- /// Window's maximum width. Default is no limit.
- ///
- public int MaxWidth { get; set; }
-
- ///
- /// Window's maximum height. Default is no limit.
- ///
- public int MaxHeight { get; set; }
-
- ///
- /// Whether window is resizable. Default is true.
- ///
- public bool Resizable { get; set; }
-
- ///
- /// Whether window is movable. This is not implemented on Linux. Default is true.
- ///
- public bool Movable { get; set; }
-
- ///
- /// Whether window is minimizable. This is not implemented on Linux. Default is true.
- ///
- public bool Minimizable { get; set; }
-
- ///
- /// Whether window is maximizable. This is not implemented on Linux. Default is true.
- ///
- public bool Maximizable { get; set; }
-
- ///
- /// Whether window is closable. This is not implemented on Linux. Default is true.
- ///
- public bool Closable { get; set; }
-
- ///
- /// Whether the window can be focused. Default is true. On Windows setting
- /// focusable: false also implies setting skipTaskbar: true. On Linux setting
- /// focusable: false makes the window stop interacting with wm, so the window will
- /// always stay on top in all workspaces.
- ///
- public bool Focusable { get; set; }
-
- ///
- /// Whether the window should always stay on top of other windows. Default is false.
- ///
- public bool AlwaysOnTop { get; set; }
-
- ///
- /// Whether the window should show in fullscreen. When explicitly set to false the
- /// fullscreen button will be hidden or disabled on macOS.Default is false.
- ///
- public bool Fullscreen { get; set; }
-
- ///
- /// Whether the window can be put into fullscreen mode. On macOS, also whether the
- /// maximize/zoom button should toggle full screen mode or maximize window.Default
- /// is true.
- ///
- public bool Fullscreenable { get; set; }
-
- ///
- /// Whether to show the window in taskbar. Default is false.
- ///
- public bool SkipTaskbar { get; set; }
-
- ///
- /// The kiosk mode. Default is false.
- ///
- public bool Kiosk { get; set; }
-
- ///
- /// Default window title. Default is "Electron.NET".
- ///
- public string Title { get; set; } = "Electron.NET";
-
- ///
- /// The window icon. On Windows it is recommended to use ICO icons to get best
- /// visual effects, you can also leave it undefined so the executable's icon will be used.
- ///
- public string Icon { get; set; }
-
- ///
- /// Whether window should be shown when created. Default is true.
- ///
- public bool Show { get; set; }
-
- ///
- /// Specify false to create a . Default is true.
- ///
- public bool Frame { get; set; }
-
- ///
- /// Whether this is a modal window. This only works when the window is a child
- /// window.Default is false.
- ///
- public bool Modal { get; set; }
-
- ///
- /// Whether the web view accepts a single mouse-down event that simultaneously
- /// activates the window.Default is false.
- ///
- public bool AcceptFirstMouse { get; set; }
-
- ///
- /// Whether to hide cursor when typing. Default is false.
- ///
- public bool DisableAutoHideCursor { get; set; }
-
- ///
- /// Auto hide the menu bar unless the Alt key is pressed. Default is false.
- ///
- public bool AutoHideMenuBar { get; set; }
-
- ///
- /// Enable the window to be resized larger than screen. Default is false.
- ///
- public bool EnableLargerThanScreen { get; set; }
-
- ///
- /// Window's background color as Hexadecimal value, like #66CD00 or #FFF or
- /// #80FFFFFF (alpha is supported). Default is #FFF (white).
- ///
- public string BackgroundColor { get; set; }
-
- ///
- /// Whether window should have a shadow. This is only implemented on macOS. Default
- /// is true.
- ///
- public bool HasShadow { get; set; }
-
- ///
- /// Forces using dark theme for the window, only works on some GTK+3 desktop
- /// environments.Default is false.
- ///
- public bool DarkTheme { get; set; }
-
- ///
- /// Makes the window . Default is false.
- ///
- public bool Transparent { get; set; }
-
- ///
- /// The type of window, default is normal window. See more about this below.
- ///
- public string Type { get; set; }
-
- ///
- /// The style of window title bar. Default is default. Possible values are:
- /// 'default' | 'hidden' | 'hidden-inset' | 'hiddenInset' | 'customButtonsOnHover'
- ///
- public string TitleBarStyle { get; set; }
-
- ///
- /// Shows the title in the tile bar in full screen mode on macOS for all
- /// titleBarStyle options.Default is false.
- ///
- public bool FullscreenWindowTitle { get; set; }
-
- ///
- /// Use WS_THICKFRAME style for frameless windows on Windows, which adds standard
- /// window frame.Setting it to false will remove window shadow and window
- /// animations.Default is true.
- ///
- public bool ThickFrame { get; set; }
-
- ///
- /// Add a type of vibrancy effect to the window, only on macOS. Can be
- /// appearance-based, light, dark, titlebar, selection, menu, popover, sidebar,
- /// medium-light or ultra-dark.
- ///
- public string Vibrancy { get; set; }
-
- ///
- /// Controls the behavior on macOS when option-clicking the green stoplight button
- /// on the toolbar or by clicking the Window > Zoom menu item.If true, the window
- /// will grow to the preferred width of the web page when zoomed, false will cause
- /// it to zoom to the width of the screen.This will also affect the behavior when
- /// calling maximize() directly.Default is false.
- ///
- public bool ZoomToPageWidth { get; set; }
-
- ///
- /// Tab group name, allows opening the window as a native tab on macOS 10.12+.
- /// Windows with the same tabbing identifier will be grouped together.This also
- /// adds a native new tab button to your window's tab bar and allows your app and
- /// window to receive the new-window-for-tab event.
- ///
- public string TabbingIdentifier { get; set; }
-
- ///
- /// Settings of web page's features.
- ///
- public WebPreferences WebPreferences { get; set; }
- }
-}
diff --git a/ElectronNET.API/Entities/BrowserWindowOptions.cs b/ElectronNET.API/Entities/BrowserWindowOptions.cs
index 8a817e7..9e6ed33 100644
--- a/ElectronNET.API/Entities/BrowserWindowOptions.cs
+++ b/ElectronNET.API/Entities/BrowserWindowOptions.cs
@@ -2,8 +2,243 @@
{
public class BrowserWindowOptions
{
+ ///
+ /// Window's width in pixels. Default is 800.
+ ///
public int Width { get; set; }
+
+ ///
+ /// Window's height in pixels. Default is 600.
+ ///
public int Height { get; set; }
+
+ ///
+ /// ( if y is used) Window's left offset from screen. Default is to center the
+ /// window.
+ ///
+ public int X { get; set; }
+
+ ///
+ /// ( if x is used) Window's top offset from screen. Default is to center the
+ /// window.
+ ///
+ public int Y { get; set; }
+
+ ///
+ /// 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.Default
+ /// is false.
+ ///
+ public bool UseContentSize { get; set; }
+
+ ///
+ /// Show window in the center of the screen.
+ ///
+ public bool Center { get; set; }
+
+ ///
+ /// Window's minimum width. Default is 0.
+ ///
+ public int MinWidth { get; set; }
+
+ ///
+ /// Window's minimum height. Default is 0.
+ ///
+ public int MinHeight { get; set; }
+
+ ///
+ /// Window's maximum width. Default is no limit.
+ ///
+ public int MaxWidth { get; set; }
+
+ ///
+ /// Window's maximum height. Default is no limit.
+ ///
+ public int MaxHeight { get; set; }
+
+ ///
+ /// Whether window is resizable. Default is true.
+ ///
+ public bool Resizable { get; set; }
+
+ ///
+ /// Whether window is movable. This is not implemented on Linux. Default is true.
+ ///
+ public bool Movable { get; set; }
+
+ ///
+ /// Whether window is minimizable. This is not implemented on Linux. Default is true.
+ ///
+ public bool Minimizable { get; set; }
+
+ ///
+ /// Whether window is maximizable. This is not implemented on Linux. Default is true.
+ ///
+ public bool Maximizable { get; set; }
+
+ ///
+ /// Whether window is closable. This is not implemented on Linux. Default is true.
+ ///
+ public bool Closable { get; set; }
+
+ ///
+ /// Whether the window can be focused. Default is true. On Windows setting
+ /// focusable: false also implies setting skipTaskbar: true. On Linux setting
+ /// focusable: false makes the window stop interacting with wm, so the window will
+ /// always stay on top in all workspaces.
+ ///
+ public bool Focusable { get; set; }
+
+ ///
+ /// Whether the window should always stay on top of other windows. Default is false.
+ ///
+ public bool AlwaysOnTop { get; set; }
+
+ ///
+ /// Whether the window should show in fullscreen. When explicitly set to false the
+ /// fullscreen button will be hidden or disabled on macOS.Default is false.
+ ///
+ public bool Fullscreen { get; set; }
+
+ ///
+ /// Whether the window can be put into fullscreen mode. On macOS, also whether the
+ /// maximize/zoom button should toggle full screen mode or maximize window.Default
+ /// is true.
+ ///
+ public bool Fullscreenable { get; set; }
+
+ ///
+ /// Whether to show the window in taskbar. Default is false.
+ ///
+ public bool SkipTaskbar { get; set; }
+
+ ///
+ /// The kiosk mode. Default is false.
+ ///
+ public bool Kiosk { get; set; }
+
+ ///
+ /// Default window title. Default is "Electron.NET".
+ ///
+ public string Title { get; set; } = "Electron.NET";
+
+ ///
+ /// The window icon. On Windows it is recommended to use ICO icons to get best
+ /// visual effects, you can also leave it undefined so the executable's icon will be used.
+ ///
+ public string Icon { get; set; }
+
+ ///
+ /// Whether window should be shown when created. Default is true.
+ ///
public bool Show { get; set; }
+
+ ///
+ /// Specify false to create a . Default is true.
+ ///
+ public bool Frame { get; set; }
+
+ ///
+ /// Whether this is a modal window. This only works when the window is a child
+ /// window.Default is false.
+ ///
+ public bool Modal { get; set; }
+
+ ///
+ /// Whether the web view accepts a single mouse-down event that simultaneously
+ /// activates the window.Default is false.
+ ///
+ public bool AcceptFirstMouse { get; set; }
+
+ ///
+ /// Whether to hide cursor when typing. Default is false.
+ ///
+ public bool DisableAutoHideCursor { get; set; }
+
+ ///
+ /// Auto hide the menu bar unless the Alt key is pressed. Default is false.
+ ///
+ public bool AutoHideMenuBar { get; set; }
+
+ ///
+ /// Enable the window to be resized larger than screen. Default is false.
+ ///
+ public bool EnableLargerThanScreen { get; set; }
+
+ ///
+ /// Window's background color as Hexadecimal value, like #66CD00 or #FFF or
+ /// #80FFFFFF (alpha is supported). Default is #FFF (white).
+ ///
+ public string BackgroundColor { get; set; }
+
+ ///
+ /// Whether window should have a shadow. This is only implemented on macOS. Default
+ /// is true.
+ ///
+ public bool HasShadow { get; set; }
+
+ ///
+ /// Forces using dark theme for the window, only works on some GTK+3 desktop
+ /// environments.Default is false.
+ ///
+ public bool DarkTheme { get; set; }
+
+ ///
+ /// Makes the window . Default is false.
+ ///
+ public bool Transparent { get; set; }
+
+ ///
+ /// The type of window, default is normal window.
+ ///
+ public string Type { get; set; }
+
+ ///
+ /// The style of window title bar. Default is default. Possible values are:
+ /// 'default' | 'hidden' | 'hidden-inset' | 'hiddenInset' | 'customButtonsOnHover'
+ ///
+ public string TitleBarStyle { get; set; }
+
+ ///
+ /// Shows the title in the tile bar in full screen mode on macOS for all
+ /// titleBarStyle options.Default is false.
+ ///
+ public bool FullscreenWindowTitle { get; set; }
+
+ ///
+ /// Use WS_THICKFRAME style for frameless windows on Windows, which adds standard
+ /// window frame.Setting it to false will remove window shadow and window
+ /// animations.Default is true.
+ ///
+ public bool ThickFrame { get; set; }
+
+ ///
+ /// Add a type of vibrancy effect to the window, only on macOS. Can be
+ /// appearance-based, light, dark, titlebar, selection, menu, popover, sidebar,
+ /// medium-light or ultra-dark.
+ ///
+ public string Vibrancy { get; set; }
+
+ ///
+ /// Controls the behavior on macOS when option-clicking the green stoplight button
+ /// on the toolbar or by clicking the Window > Zoom menu item.If true, the window
+ /// will grow to the preferred width of the web page when zoomed, false will cause
+ /// it to zoom to the width of the screen.This will also affect the behavior when
+ /// calling maximize() directly.Default is false.
+ ///
+ public bool ZoomToPageWidth { get; set; }
+
+ ///
+ /// Tab group name, allows opening the window as a native tab on macOS 10.12+.
+ /// Windows with the same tabbing identifier will be grouped together.This also
+ /// adds a native new tab button to your window's tab bar and allows your app and
+ /// window to receive the new-window-for-tab event.
+ ///
+ public string TabbingIdentifier { get; set; }
+
+ ///
+ /// Settings of web page's features.
+ ///
+ public WebPreferences WebPreferences { get; set; }
}
}
diff --git a/ElectronNET.API/Entities/Rectangle.cs b/ElectronNET.API/Entities/Rectangle.cs
new file mode 100644
index 0000000..7e1a8eb
--- /dev/null
+++ b/ElectronNET.API/Entities/Rectangle.cs
@@ -0,0 +1,10 @@
+namespace ElectronNET.API.Entities
+{
+ public class Rectangle
+ {
+ public int X { get; set; }
+ public int Y { get; set; }
+ public int Width { get; set; }
+ public int Height { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ElectronNET.API/Entities/Size.cs b/ElectronNET.API/Entities/Size.cs
new file mode 100644
index 0000000..459428a
--- /dev/null
+++ b/ElectronNET.API/Entities/Size.cs
@@ -0,0 +1,9 @@
+namespace ElectronNET.API.Entities
+{
+ public class Size
+ {
+ public int Width { get; set; }
+
+ public int Height { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ElectronNET.API/Extensions/MenuItemExtensions.cs b/ElectronNET.API/Extensions/MenuItemExtensions.cs
new file mode 100644
index 0000000..ba5f8b5
--- /dev/null
+++ b/ElectronNET.API/Extensions/MenuItemExtensions.cs
@@ -0,0 +1,53 @@
+using ElectronNET.API.Entities;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ElectronNET.API.Extensions
+{
+ internal static class MenuItemExtensions
+ {
+ public static MenuItem[] AddMenuItemsId(this MenuItem[] menuItems)
+ {
+ for (int index = 0; index < menuItems.Length; index++)
+ {
+ var menuItem = menuItems[index];
+ if (menuItem?.Submenu?.Length > 0)
+ {
+ AddMenuItemsId(menuItem.Submenu);
+ }
+
+ if (string.IsNullOrEmpty(menuItem.Role) &&
+ string.IsNullOrEmpty(menuItem.Id))
+ {
+ menuItem.Id = Guid.NewGuid().ToString();
+ }
+ }
+
+ return menuItems;
+ }
+
+ public static MenuItem GetMenuItem(this List