From e86c409e6bca7ac32490999955a1df128b93e5cb Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Mon, 7 Jul 2014 14:27:23 -0400 Subject: [PATCH] Update DevToolsWindow to use views and aura This is required to make it work in Chrome 35. --- brightray/browser/win/devtools_window.cc | 69 +++++++++++-------- brightray/browser/win/devtools_window.h | 22 +++--- .../win/inspectable_web_contents_view_win.cc | 19 ++--- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/brightray/browser/win/devtools_window.cc b/brightray/browser/win/devtools_window.cc index 96d0a30484..bce83cc5fb 100644 --- a/brightray/browser/win/devtools_window.cc +++ b/brightray/browser/win/devtools_window.cc @@ -4,52 +4,63 @@ #include "browser/win/inspectable_web_contents_view_win.h" #include "content/public/browser/web_contents_view.h" -#include "ui/base/win/hidden_window.h" +#include "ui/views/layout/fill_layout.h" +#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" +#include "ui/views/widget/widget_delegate.h" namespace brightray { +namespace { + +class WidgetDelegateView : public views::WidgetDelegateView { + public: + WidgetDelegateView() { + SetLayoutManager(new views::FillLayout); + } + + virtual void DeleteDelegate() OVERRIDE { delete this; } + virtual views::View* GetContentsView() OVERRIDE{ return this; } + virtual bool CanResize() const OVERRIDE { return true; } + virtual bool CanMaximize() const OVERRIDE { return true; } + virtual base::string16 GetWindowTitle() const OVERRIDE { return L"Developer Tools"; } + virtual gfx::Size GetPreferredSize() OVERRIDE { return gfx::Size(800, 600); } + virtual gfx::Size GetMinimumSize() OVERRIDE { return gfx::Size(100, 100); } +}; + +} + DevToolsWindow* DevToolsWindow::Create( InspectableWebContentsViewWin* controller) { return new DevToolsWindow(controller); } DevToolsWindow::DevToolsWindow(InspectableWebContentsViewWin* controller) - : controller_(controller) { + : controller_(controller), + widget_(new views::Widget) { + auto delegate_view = new WidgetDelegateView; + views::Widget::InitParams params; + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.top_level = true; + params.native_widget = new views::DesktopNativeWidgetAura(widget_.get()); + params.delegate = delegate_view; + widget_->Init(params); + delegate_view->AddChildView(controller->GetView()); + delegate_view->Layout(); } DevToolsWindow::~DevToolsWindow() { } -LRESULT DevToolsWindow::OnCreate(UINT, WPARAM, LPARAM) { - auto devtools_web_contents = - controller_->inspectable_web_contents()->devtools_web_contents(); - SetParent(devtools_web_contents->GetView()->GetNativeView(), hwnd()); - SetWindowText(hwnd(), L"Developer Tools"); - return 0; +void DevToolsWindow::Show() { + widget_->Show(); } -LRESULT DevToolsWindow::OnDestroy(UINT, WPARAM, LPARAM) { - auto devtools_web_contents = - controller_->inspectable_web_contents()->devtools_web_contents(); - SetParent( - devtools_web_contents->GetView()->GetNativeView(), ui::GetHiddenWindow()); +void DevToolsWindow::Close() { + widget_->Hide(); +} + +void DevToolsWindow::Destroy() { delete this; - return 0; -} - -LRESULT DevToolsWindow::OnSize(UINT, WPARAM, LPARAM) { - RECT rect; - GetClientRect(hwnd(), &rect); - - auto devtools_web_contents = - controller_->inspectable_web_contents()->devtools_web_contents(); - SetWindowPos(devtools_web_contents->GetView()->GetNativeView(), - nullptr, - rect.left, rect.top, - rect.right - rect.left, rect.bottom - rect.top, - SWP_NOZORDER | SWP_SHOWWINDOW); - - return 0; } } // namespace brightray diff --git a/brightray/browser/win/devtools_window.h b/brightray/browser/win/devtools_window.h index a7e34d2b73..33c1a4120b 100644 --- a/brightray/browser/win/devtools_window.h +++ b/brightray/browser/win/devtools_window.h @@ -1,35 +1,33 @@ #ifndef BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_ #define BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_ +#include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" -#include "ui/gfx/win/window_impl.h" + +namespace views { +class Widget; +} namespace brightray { class InspectableWebContentsViewWin; -class DevToolsWindow : public gfx::WindowImpl, - public base::SupportsWeakPtr { +class DevToolsWindow : public base::SupportsWeakPtr { public: static DevToolsWindow* Create( InspectableWebContentsViewWin* inspectable_web_contents_view_win); - CR_BEGIN_MSG_MAP_EX(DevToolsWindow) - CR_MESSAGE_HANDLER_EX(WM_CREATE, OnCreate) - CR_MESSAGE_HANDLER_EX(WM_DESTROY, OnDestroy) - CR_MESSAGE_HANDLER_EX(WM_SIZE, OnSize) - CR_END_MSG_MAP() + void Show(); + void Close(); + void Destroy(); private: explicit DevToolsWindow( InspectableWebContentsViewWin* inspectable_web_contents_view_win); ~DevToolsWindow(); - LRESULT OnCreate(UINT message, WPARAM, LPARAM); - LRESULT OnDestroy(UINT message, WPARAM, LPARAM); - LRESULT OnSize(UINT message, WPARAM, LPARAM); - InspectableWebContentsViewWin* controller_; + scoped_ptr widget_; DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); }; diff --git a/brightray/browser/win/inspectable_web_contents_view_win.cc b/brightray/browser/win/inspectable_web_contents_view_win.cc index 24a52b658f..641725889b 100644 --- a/brightray/browser/win/inspectable_web_contents_view_win.cc +++ b/brightray/browser/win/inspectable_web_contents_view_win.cc @@ -143,7 +143,7 @@ InspectableWebContentsViewWin::InspectableWebContentsViewWin( InspectableWebContentsViewWin::~InspectableWebContentsViewWin() { if (devtools_window_) - DestroyWindow(devtools_window_->hwnd()); + devtools_window_->Destroy(); } views::View* InspectableWebContentsViewWin::GetView() const { @@ -161,19 +161,10 @@ gfx::NativeView InspectableWebContentsViewWin::GetNativeView() const { void InspectableWebContentsViewWin::ShowDevTools() { if (undocked_) { - if (!devtools_window_) { + if (!devtools_window_) devtools_window_ = DevToolsWindow::Create(this)->AsWeakPtr(); - devtools_window_->Init(HWND_DESKTOP, gfx::Rect()); - } - auto contents_view = inspectable_web_contents_->GetWebContents()->GetView(); - auto size = contents_view->GetContainerSize(); - size.Enlarge(-kWindowInset, -kWindowInset); - gfx::CenterAndSizeWindow(contents_view->GetNativeView(), - devtools_window_->hwnd(), - size); - - ShowWindow(devtools_window_->hwnd(), SW_SHOWNORMAL); + devtools_window_->Show(); } else { container_->ShowDevTools(); } @@ -181,7 +172,7 @@ void InspectableWebContentsViewWin::ShowDevTools() { void InspectableWebContentsViewWin::CloseDevTools() { if (undocked_) - SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0); + devtools_window_->Close(); else container_->CloseDevTools(); } @@ -197,7 +188,7 @@ bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) { } else if (side == "right" || side == "bottom") { undocked_ = false; if (devtools_window_) - SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0); + devtools_window_->Close(); container_->SetDockSide(side); } else { return false;