From 5150fd69460f9a9333aa4afba0a8e6660a1558af Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 15 May 2014 16:05:35 +0800 Subject: [PATCH] Add BrowserWindow::setContentSize. --- atom/browser/api/atom_api_window.cc | 7 ++++++- atom/browser/api/atom_api_window.h | 1 + atom/browser/native_window.h | 1 + atom/browser/native_window_gtk.cc | 5 +++++ atom/browser/native_window_gtk.h | 1 + atom/browser/native_window_mac.h | 1 + atom/browser/native_window_mac.mm | 13 +++++++++++++ atom/browser/native_window_win.cc | 4 ++++ atom/browser/native_window_win.h | 1 + 9 files changed, 33 insertions(+), 1 deletion(-) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index cb3b562a4b42..3c4b7bbf8334 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -181,6 +181,10 @@ std::vector Window::GetSize() { return result; } +void Window::SetContentSize(int width, int height) { + window_->SetContentSize(gfx::Size(width, height)); +} + std::vector Window::GetContentSize() { std::vector result(2); gfx::Size size = window_->GetContentSize(); @@ -339,8 +343,9 @@ void Window::BuildPrototype(v8::Isolate* isolate, .SetMethod("setFullScreen", &Window::SetFullscreen) .SetMethod("isFullScreen", &Window::IsFullscreen) .SetMethod("getSize", &Window::GetSize) - .SetMethod("getContentSize", &Window::GetContentSize) .SetMethod("setSize", &Window::SetSize) + .SetMethod("getContentSize", &Window::GetContentSize) + .SetMethod("setContentSize", &Window::SetContentSize) .SetMethod("setMinimumSize", &Window::SetMinimumSize) .SetMethod("getMinimumSize", &Window::GetMinimumSize) .SetMethod("setMaximumSize", &Window::SetMaximumSize) diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index ca3b13346d47..239673672d2b 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -73,6 +73,7 @@ class Window : public mate::EventEmitter, bool IsFullscreen(); void SetSize(int width, int height); std::vector GetSize(); + void SetContentSize(int width, int height); std::vector GetContentSize(); void SetMinimumSize(int width, int height); std::vector GetMinimumSize(); diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index e3ac3b4ff8b0..7c2b60806713 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -111,6 +111,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, virtual bool IsFullscreen() = 0; virtual void SetSize(const gfx::Size& size) = 0; virtual gfx::Size GetSize() = 0; + virtual void SetContentSize(const gfx::Size& size) = 0; virtual gfx::Size GetContentSize() = 0; virtual void SetMinimumSize(const gfx::Size& size) = 0; virtual gfx::Size GetMinimumSize() = 0; diff --git a/atom/browser/native_window_gtk.cc b/atom/browser/native_window_gtk.cc index 95d379946240..f07d4cb85407 100644 --- a/atom/browser/native_window_gtk.cc +++ b/atom/browser/native_window_gtk.cc @@ -262,6 +262,11 @@ gfx::Size NativeWindowGtk::GetSize() { return gfx::Size(frame_extents.width, frame_extents.height); } +void NativeWindowGtk::SetContentSize(const gfx::Size& size) { + GtkAllocation size = { 0, 0, size.width(), size.height() }; + gtk_widget_size_allocate(GetWebContents()->GetView()->GetNativeView(), &size); +} + gfx::Size NativeWindowGtk::GetContentSize() { gint width, height; gtk_window_get_size(window_, &width, &height); diff --git a/atom/browser/native_window_gtk.h b/atom/browser/native_window_gtk.h index a6dc9305b34a..d73381de3382 100644 --- a/atom/browser/native_window_gtk.h +++ b/atom/browser/native_window_gtk.h @@ -46,6 +46,7 @@ class NativeWindowGtk : public NativeWindow, virtual bool IsFullscreen() OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetSize() OVERRIDE; + virtual void SetContentSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetContentSize() OVERRIDE; virtual void SetMinimumSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetMinimumSize() OVERRIDE; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index af75c74ba510..d60da8df7629 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -38,6 +38,7 @@ class NativeWindowMac : public NativeWindow { virtual bool IsFullscreen() OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetSize() OVERRIDE; + virtual void SetContentSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetContentSize() OVERRIDE; virtual void SetMinimumSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetMinimumSize() OVERRIDE; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index e7085744c4f2..e8da6b523e11 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -305,6 +305,19 @@ gfx::Size NativeWindowMac::GetSize() { return gfx::Size(frame.size.width, frame.size.height); } +void NativeWindowMac::SetContentSize(const gfx::Size& size) { + NSRect frame_nsrect = [window_ frame]; + NSSize frame = frame_nsrect.size; + NSSize content = [window_ contentRectForFrameRect:frame_nsrect].size; + + int width = size.width() + frame.width - content.width; + int height = size.height() + frame.height - content.height; + frame_nsrect.origin.y -= height - frame_nsrect.size.height; + frame_nsrect.size.width = width; + frame_nsrect.size.height = height; + [window_ setFrame:frame_nsrect display:YES]; +} + gfx::Size NativeWindowMac::GetContentSize() { NSRect bounds = [[window_ contentView] bounds]; return gfx::Size(bounds.size.width, bounds.size.height); diff --git a/atom/browser/native_window_win.cc b/atom/browser/native_window_win.cc index 2e06877b0d8d..12d1ae14297e 100644 --- a/atom/browser/native_window_win.cc +++ b/atom/browser/native_window_win.cc @@ -295,6 +295,10 @@ gfx::Size NativeWindowWin::GetSize() { return window_->GetWindowBoundsInScreen().size(); } +void NativeWindowWin::SetContentSize(const gfx::Size& size) { + // FIXME +} + gfx::Size NativeWindowWin::GetContentSize() { return window_->GetClientAreaBoundsInScreen().size(); } diff --git a/atom/browser/native_window_win.h b/atom/browser/native_window_win.h index 7324e971d035..ac912728f6b0 100644 --- a/atom/browser/native_window_win.h +++ b/atom/browser/native_window_win.h @@ -53,6 +53,7 @@ class NativeWindowWin : public NativeWindow, virtual bool IsFullscreen() OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetSize() OVERRIDE; + virtual void SetContentSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetContentSize() OVERRIDE; virtual void SetMinimumSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetMinimumSize() OVERRIDE;