diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-16 09:10:20 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-16 09:10:20 +0000 |
commit | 12728a26da3b9242a30b977f00a75ad3194f07a1 (patch) | |
tree | 469cd460db60362e4f0e80efcabc3f0cad853f75 /chrome/browser/chromeos/chromeos_browser_view.cc | |
parent | 89f0e7493eb6d5a1a8001e975d0b1c45c47e9fc7 (diff) | |
download | chromium_src-12728a26da3b9242a30b977f00a75ad3194f07a1.zip chromium_src-12728a26da3b9242a30b977f00a75ad3194f07a1.tar.gz chromium_src-12728a26da3b9242a30b977f00a75ad3194f07a1.tar.bz2 |
Refactoring to reduce chromeos dependency in chrome.
* renamed BrowserLayoutManager to more explicit, BrowserViewLayoutManager.
* Added factory method to create chromeos specific tab/tabstrip and layoutmanagers.
* Introduced ChromeosBrowserView and chromeos specific tab/tabstrip and layoutmanager, and moved chromeos specifi code into them.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/543095
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36452 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/chromeos_browser_view.cc')
-rw-r--r-- | chrome/browser/chromeos/chromeos_browser_view.cc | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/chromeos_browser_view.cc b/chrome/browser/chromeos/chromeos_browser_view.cc new file mode 100644 index 0000000..57455a6 --- /dev/null +++ b/chrome/browser/chromeos/chromeos_browser_view.cc @@ -0,0 +1,144 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/views/frame/browser_extender.h" +#include "chrome/browser/views/frame/browser_view.h" +#include "chrome/browser/views/frame/chrome_browser_view_layout_manager.h" +#include "chrome/browser/views/tabs/tab.h" +#include "chrome/browser/views/tabs/tab_strip.h" + +namespace { + +// A chromeos implementation of Tab that shows the compact location bar. +class ChromeosTab : public Tab { + public: + ChromeosTab(TabStrip* tab_strip, const BrowserView* browser_view) + : Tab(tab_strip), + browser_view_(browser_view) { + } + virtual ~ChromeosTab() {} + + // Overridden from views::View. + virtual void OnMouseEntered(const views::MouseEvent& event) { + TabRenderer::OnMouseEntered(event); + browser_view_->browser_extender()->OnMouseEnteredToTab(this); + } + + virtual void OnMouseMoved(const views::MouseEvent& event) { + browser_view_->browser_extender()->OnMouseMovedOnTab(this); + } + + virtual void OnMouseExited(const views::MouseEvent& event) { + TabRenderer::OnMouseExited(event); + browser_view_->browser_extender()->OnMouseExitedFromTab(this); + } + + private: + const BrowserView* browser_view_; + + DISALLOW_COPY_AND_ASSIGN(ChromeosTab); +}; + +// A Tabstrip that uses ChromeosTab as a Tab implementation. +class ChromeosTabStrip : public TabStrip { + public: + ChromeosTabStrip(TabStripModel* model, const BrowserView* browser_view) + : TabStrip(model), browser_view_(browser_view) { + } + virtual ~ChromeosTabStrip() {} + + protected: + // Overridden from TabStrip. + virtual Tab* CreateTab() { + return new ChromeosTab(this, browser_view_); + } + + private: + const BrowserView* browser_view_; + + DISALLOW_COPY_AND_ASSIGN(ChromeosTabStrip); +}; + +// LayoutManager for ChromeosBrowserView, which layouts extra components such as +// main menu, stataus are via BrowserExtender. +class ChromeosBrowserViewLayoutManager : public ChromeBrowserViewLayoutManager { + public: + ChromeosBrowserViewLayoutManager() : ChromeBrowserViewLayoutManager() {} + virtual ~ChromeosBrowserViewLayoutManager() {} + + // Overriden from ChromeBrowserViewLayoutManager. + virtual int LayoutTabStrip() { + gfx::Rect layout_bounds = + browser_view_->frame()->GetBoundsForTabStrip(tabstrip_); + gfx::Rect toolbar_bounds = browser_view_->GetToolbarBounds(); + tabstrip_->SetBackgroundOffset( + gfx::Point(layout_bounds.x() - toolbar_bounds.x(), layout_bounds.y())); + + gfx::Point tabstrip_origin = layout_bounds.origin(); + views::View::ConvertPointToView(browser_view_->GetParent(), browser_view_, + &tabstrip_origin); + layout_bounds.set_origin(tabstrip_origin); + + // Layout extra components. + int bottom = 0; + gfx::Rect tabstrip_bounds; + browser_view_->browser_extender()->Layout( + layout_bounds, &tabstrip_bounds, &bottom); + tabstrip_->SetVisible(browser_view_->IsTabStripVisible()); + tabstrip_->SetBounds(tabstrip_bounds); + return bottom; + } + + private: + DISALLOW_COPY_AND_ASSIGN(ChromeosBrowserViewLayoutManager); +}; + +// ChromeosBrowserView implements Chromeos specific behavior of +// BrowserView. +class ChromeosBrowserView : public BrowserView { + public: + explicit ChromeosBrowserView(Browser* browser) + : BrowserView(browser) { + } + virtual ~ChromeosBrowserView() {} + + // Overriden from BrowserView. + virtual bool IsToolbarVisible() const { + if (browser_extender()->ShouldForceHideToolbar()) + return false; + return BrowserView::IsToolbarVisible(); + } + + virtual void SetFocusToLocationBar() { + if (!browser_extender()->SetFocusToCompactNavigationBar()) { + BrowserView::SetFocusToLocationBar(); + } + } + + virtual void UpdateTitleBar() { + BrowserView::UpdateTitleBar(); + browser_extender()->UpdateTitleBar(); + } + + virtual BrowserViewLayoutManager* CreateLayoutManager() const { + return new ChromeosBrowserViewLayoutManager(); + } + + virtual TabStrip* CreateTabStrip(TabStripModel* tab_strip_model) const { + return new ChromeosTabStrip(tab_strip_model, this); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ChromeosBrowserView); +}; + +} // namespace + +// static +BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { + // Create a browser view for chromeos. + BrowserView* view = new ChromeosBrowserView(browser); + BrowserFrame::Create(view, browser->profile()); + return view; +} |