From ae6a1b409f3bb5bb2736a3b3ae138257adf79edb Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Fri, 1 May 2015 16:20:53 +0530 Subject: [PATCH 1/2] window: adding setBounds and getBounds api --- atom/browser/api/atom_api_window.cc | 11 +++++++++++ atom/browser/api/atom_api_window.h | 6 ++++++ atom/browser/native_window.h | 2 ++ atom/browser/native_window_mac.h | 2 ++ atom/browser/native_window_mac.mm | 9 +++++++++ atom/browser/native_window_views.cc | 8 ++++++++ atom/browser/native_window_views.h | 2 ++ docs/api/browser-window.md | 14 ++++++++++++++ 8 files changed, 54 insertions(+) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 22f40be27e..b71499d369 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -15,6 +15,7 @@ #include "native_mate/callback.h" #include "native_mate/constructor.h" #include "native_mate/dictionary.h" +#include "ui/gfx/geometry/rect.h" #include "atom/common/node_includes.h" @@ -222,6 +223,14 @@ bool Window::IsFullscreen() { return window_->IsFullscreen(); } +void Window::SetBounds(const gfx::Rect& bounds) { + window_->SetBounds(bounds); +} + +gfx::Rect Window::GetBounds() { + return window_->GetBounds(); +} + void Window::SetSize(int width, int height) { window_->SetSize(gfx::Size(width, height)); } @@ -464,6 +473,8 @@ void Window::BuildPrototype(v8::Isolate* isolate, .SetMethod("isMinimized", &Window::IsMinimized) .SetMethod("setFullScreen", &Window::SetFullScreen) .SetMethod("isFullScreen", &Window::IsFullscreen) + .SetMethod("getBounds", &Window::GetBounds) + .SetMethod("setBounds", &Window::SetBounds) .SetMethod("getSize", &Window::GetSize) .SetMethod("setSize", &Window::SetSize) .SetMethod("getContentSize", &Window::GetContentSize) diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index 2894f0e503..d5c3ceedd2 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -16,6 +16,10 @@ class GURL; +namespace gfx { +class Rect; +} + namespace mate { class Arguments; class Dictionary; @@ -85,6 +89,8 @@ class Window : public mate::EventEmitter, bool IsMinimized(); void SetFullScreen(bool fullscreen); bool IsFullscreen(); + void SetBounds(const gfx::Rect& bounds); + gfx::Rect GetBounds(); void SetSize(int width, int height); std::vector GetSize(); void SetContentSize(int width, int height); diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index b1f1a384b8..d04769f171 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -113,6 +113,8 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, virtual bool IsMinimized() = 0; virtual void SetFullScreen(bool fullscreen) = 0; virtual bool IsFullscreen() const = 0; + virtual void SetBounds(const gfx::Rect& bounds) = 0; + virtual gfx::Rect GetBounds() = 0; virtual void SetSize(const gfx::Size& size) = 0; virtual gfx::Size GetSize() = 0; virtual void SetContentSize(const gfx::Size& size) = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 822594038a..24d52664a0 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -45,6 +45,8 @@ class NativeWindowMac : public NativeWindow { bool IsMinimized() override; void SetFullScreen(bool fullscreen) override; bool IsFullscreen() const override; + void SetBounds(const gfx::Rect& bounds) override; + gfx::Rect GetBounds() override; void SetSize(const gfx::Size& size) override; gfx::Size GetSize() override; void SetContentSize(const gfx::Size& size) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index b7eccd2a6c..d1cb82a2f4 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -470,6 +470,15 @@ bool NativeWindowMac::IsFullscreen() const { return [window_ styleMask] & NSFullScreenWindowMask; } +void NativeWindowMac::SetBounds(const gfx::Rect& bounds) { + Move(bounds); +} + +gfx::Rect NativeWindowMac::GetBounds() { + return gfx::Rect(GetPosition(), + GetSize()); +} + void NativeWindowMac::SetSize(const gfx::Size& size) { NSRect frame = [window_ frame]; frame.origin.y -= size.height() - frame.size.height; diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index 1ef0a63680..d8eed64009 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -373,6 +373,14 @@ bool NativeWindowViews::IsFullscreen() const { return window_->IsFullscreen(); } +void NativeWindowViews::SetBounds(const gfx::Rect& bounds) { + window_->SetBoundsConstrained(bounds); +} + +gfx::Rect NativeWindowViews::GetBounds() { + return window_->GetRestoredBounds(); +} + void NativeWindowViews::SetSize(const gfx::Size& size) { #if defined(USE_X11) // On Linux the minimum and maximum size should be updated with window size diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 6ec3f2aef4..020e349332 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -50,6 +50,8 @@ class NativeWindowViews : public NativeWindow, bool IsMinimized() override; void SetFullScreen(bool fullscreen) override; bool IsFullscreen() const override; + void SetBounds(const gfx::Rect& bounds) override; + gfx::Rect GetBounds() override; void SetSize(const gfx::Size& size) override; gfx::Size GetSize() override; void SetContentSize(const gfx::Size& size) override; diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index f16a629fcc..44021cabe9 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -316,6 +316,20 @@ Sets whether the window should be in fullscreen mode. Returns whether the window is in fullscreen mode. +### BrowserWindow.setBounds(options) + +* `options` Object + * `x` Integer + * `y` Integer + * `width` Integer + * `height` Integer + +Resizes and moves the window to `width`, `height`, `x`, `y`. + +### BrowserWindow.getBounds() + +Returns an object that contains window's width, height, x and y values. + ### BrowserWindow.setSize(width, height) * `width` Integer From 9ae59e8ac7bc2f117066ca9c1637bd15fb78b8a9 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Fri, 1 May 2015 20:10:46 +0530 Subject: [PATCH 2/2] removed move utility and replaced with setbounds --- atom/browser/native_window.cc | 5 ++-- atom/browser/native_window.h | 1 - atom/browser/native_window_mac.h | 3 +- atom/browser/native_window_mac.mm | 43 ++++++++++++++--------------- atom/browser/native_window_views.cc | 29 +++++++++++-------- atom/browser/native_window_views.h | 1 - 6 files changed, 40 insertions(+), 42 deletions(-) diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 0f757e8c61..2920178058 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -192,7 +192,7 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) { int width = -1, height = -1; options.Get(switches::kWidth, &width); options.Get(switches::kHeight, &height); - Move(gfx::Rect(x, y, width, height)); + SetBounds(gfx::Rect(x, y, width, height)); } else if (options.Get(switches::kCenter, ¢er) && center) { Center(); } @@ -646,8 +646,7 @@ void NativeWindow::DeactivateContents(content::WebContents* contents) { void NativeWindow::MoveContents(content::WebContents* source, const gfx::Rect& pos) { - SetPosition(pos.origin()); - SetSize(pos.size()); + SetBounds(pos); } void NativeWindow::CloseContents(content::WebContents* source) { diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index d04769f171..7205671583 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -98,7 +98,6 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, virtual void Close() = 0; virtual void CloseImmediately() = 0; - virtual void Move(const gfx::Rect& pos) = 0; virtual void Focus(bool focus) = 0; virtual bool IsFocused() = 0; virtual void Show() = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 24d52664a0..0fa3fe9cce 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -30,7 +30,6 @@ class NativeWindowMac : public NativeWindow { // NativeWindow implementation. void Close() override; void CloseImmediately() override; - void Move(const gfx::Rect& pos) override; void Focus(bool focus) override; bool IsFocused() override; void Show() override; @@ -46,7 +45,7 @@ class NativeWindowMac : public NativeWindow { void SetFullScreen(bool fullscreen) override; bool IsFullscreen() const override; void SetBounds(const gfx::Rect& bounds) override; - gfx::Rect GetBounds() override; + gfx::Rect GetBounds() override; void SetSize(const gfx::Size& size) override; gfx::Size GetSize() override; void SetContentSize(const gfx::Size& size) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index d1cb82a2f4..e2b58e96c7 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -382,18 +382,6 @@ void NativeWindowMac::CloseImmediately() { [window_ close]; } -void NativeWindowMac::Move(const gfx::Rect& pos) { - NSRect cocoa_bounds = NSMakeRect(pos.x(), 0, - pos.width(), - pos.height()); - // Flip coordinates based on the primary screen. - NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; - cocoa_bounds.origin.y = - NSHeight([screen frame]) - pos.height() - pos.y(); - - [window_ setFrame:cocoa_bounds display:YES]; -} - void NativeWindowMac::Focus(bool focus) { if (!IsVisible()) return; @@ -471,12 +459,26 @@ bool NativeWindowMac::IsFullscreen() const { } void NativeWindowMac::SetBounds(const gfx::Rect& bounds) { - Move(bounds); + NSRect cocoa_bounds = NSMakeRect(bounds.x(), 0, + bounds.width(), + bounds.height()); + // Flip coordinates based on the primary screen. + NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; + cocoa_bounds.origin.y = + NSHeight([screen frame]) - bounds.height() - bounds.y(); + + [window_ setFrame:cocoa_bounds display:YES]; } gfx::Rect NativeWindowMac::GetBounds() { - return gfx::Rect(GetPosition(), - GetSize()); + NSRect frame = [window_ frame]; + NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; + + gfx::Point pos(frame.origin.x, + NSHeight([screen frame]) - frame.origin.y - frame.size.height); + gfx::Size size(frame.size.width, frame.size.height); + + return gfx::Rect(pos, size); } void NativeWindowMac::SetSize(const gfx::Size& size) { @@ -489,8 +491,7 @@ void NativeWindowMac::SetSize(const gfx::Size& size) { } gfx::Size NativeWindowMac::GetSize() { - NSRect frame = [window_ frame]; - return gfx::Size(frame.size.width, frame.size.height); + return GetBounds().size(); } void NativeWindowMac::SetContentSize(const gfx::Size& size) { @@ -564,15 +565,11 @@ void NativeWindowMac::Center() { } void NativeWindowMac::SetPosition(const gfx::Point& position) { - Move(gfx::Rect(position, GetSize())); + SetBounds(gfx::Rect(position, GetSize())); } gfx::Point NativeWindowMac::GetPosition() { - NSRect frame = [window_ frame]; - NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; - - return gfx::Point(frame.origin.x, - NSHeight([screen frame]) - frame.origin.y - frame.size.height); + return GetBounds().origin(); } void NativeWindowMac::SetTitle(const std::string& title) { diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index d8eed64009..3b283ddbec 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -291,10 +291,6 @@ void NativeWindowViews::CloseImmediately() { window_->CloseNow(); } -void NativeWindowViews::Move(const gfx::Rect& bounds) { - window_->SetBounds(bounds); -} - void NativeWindowViews::Focus(bool focus) { if (focus) window_->Activate(); @@ -374,11 +370,25 @@ bool NativeWindowViews::IsFullscreen() const { } void NativeWindowViews::SetBounds(const gfx::Rect& bounds) { - window_->SetBoundsConstrained(bounds); +#if defined(USE_X11) + // On Linux the minimum and maximum size should be updated with window size + // when window is not resizable. + if (!resizable_) { + SetMaximumSize(bounds.size()); + SetMinimumSize(bounds.size()); + } +#endif + + window_->SetBounds(bounds); } gfx::Rect NativeWindowViews::GetBounds() { - return window_->GetRestoredBounds(); +#if defined(OS_WIN) + if (IsMinimized()) + return window_->GetRestoredBounds(); +#endif + + return window_->GetWindowBoundsInScreen(); } void NativeWindowViews::SetSize(const gfx::Size& size) { @@ -395,12 +405,7 @@ void NativeWindowViews::SetSize(const gfx::Size& size) { } gfx::Size NativeWindowViews::GetSize() { -#if defined(OS_WIN) - if (IsMinimized()) - return window_->GetRestoredBounds().size(); -#endif - - return window_->GetWindowBoundsInScreen().size(); + return GetBounds().size(); } void NativeWindowViews::SetContentSize(const gfx::Size& size) { diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 020e349332..978aac8262 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -35,7 +35,6 @@ class NativeWindowViews : public NativeWindow, // NativeWindow: void Close() override; void CloseImmediately() override; - void Move(const gfx::Rect& pos) override; void Focus(bool focus) override; bool IsFocused() override; void Show() override;