summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-08 21:39:15 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-08 21:39:15 +0000
commit349e8d271a90f15a4746412c93706cc9f78e4520 (patch)
treebca936ec3c50aca8e796ccbbe892f6b5c58f88e6 /chrome
parent074c158550d1ed05a8d50950292f39f0d9f41147 (diff)
downloadchromium_src-349e8d271a90f15a4746412c93706cc9f78e4520.zip
chromium_src-349e8d271a90f15a4746412c93706cc9f78e4520.tar.gz
chromium_src-349e8d271a90f15a4746412c93706cc9f78e4520.tar.bz2
ThemeBackground class.
This simplifies the background painting of components on the frame in various tab modes. Removed unused code in status_are_view, as it's always compiled with views now. BUG=None TEST=None Review URL: http://codereview.chromium.org/517076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35828 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/browser_extenders.cc7
-rw-r--r--chrome/browser/chromeos/compact_navigation_bar.cc47
-rw-r--r--chrome/browser/chromeos/compact_navigation_bar.h6
-rwxr-xr-xchrome/browser/chromeos/status_area_view.cc85
-rw-r--r--chrome/browser/chromeos/status_area_view.h13
-rw-r--r--chrome/browser/views/frame/browser_frame.h3
-rw-r--r--chrome/browser/views/frame/browser_frame_gtk.cc4
-rw-r--r--chrome/browser/views/frame/browser_frame_gtk.h1
-rw-r--r--chrome/browser/views/frame/browser_frame_win.cc4
-rw-r--r--chrome/browser/views/frame/browser_frame_win.h1
-rw-r--r--chrome/browser/views/theme_background.cc47
-rw-r--r--chrome/browser/views/theme_background.h40
-rwxr-xr-xchrome/chrome_browser.gypi4
13 files changed, 155 insertions, 107 deletions
diff --git a/chrome/browser/chromeos/browser_extenders.cc b/chrome/browser/chromeos/browser_extenders.cc
index 578586e..510b787f 100644
--- a/chrome/browser/chromeos/browser_extenders.cc
+++ b/chrome/browser/chromeos/browser_extenders.cc
@@ -84,12 +84,11 @@ class NormalExtender : public BrowserExtender,
Browser* browser = browser_view()->browser();
compact_location_bar_.reset(
new chromeos::CompactLocationBar(browser_view()));
- compact_navigation_bar_ = new chromeos::CompactNavigationBar(browser);
+ compact_navigation_bar_ =
+ new chromeos::CompactNavigationBar(browser_view());
browser_view()->AddChildView(compact_navigation_bar_);
compact_navigation_bar_->Init();
- status_area_ = new chromeos::StatusAreaView(
- browser,
- browser_view()->GetWindow()->GetNativeWindow());
+ status_area_ = new chromeos::StatusAreaView(browser_view());
browser_view()->AddChildView(status_area_);
status_area_->Init();
diff --git a/chrome/browser/chromeos/compact_navigation_bar.cc b/chrome/browser/chromeos/compact_navigation_bar.cc
index 8c92a2a..d6b137cc 100644
--- a/chrome/browser/chromeos/compact_navigation_bar.cc
+++ b/chrome/browser/chromeos/compact_navigation_bar.cc
@@ -20,6 +20,8 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/view_ids.h"
#include "chrome/browser/views/event_utils.h"
+#include "chrome/browser/views/frame/browser_view.h"
+#include "chrome/browser/views/theme_background.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "views/controls/button/button_dropdown.h"
@@ -47,8 +49,8 @@ static const int kURLPadding = 2;
////////////////////////////////////////////////////////////////////////////////
// CompactNavigationBar public:
-CompactNavigationBar::CompactNavigationBar(Browser* browser)
- : browser_(browser),
+CompactNavigationBar::CompactNavigationBar(BrowserView* browser_view)
+ : browser_view_(browser_view),
initialized_(false) {
SetFocusable(true);
}
@@ -61,14 +63,14 @@ CompactNavigationBar::~CompactNavigationBar() {
void CompactNavigationBar::Init() {
DCHECK(!initialized_);
initialized_ = true;
-
- browser_->command_updater()->AddCommandObserver(IDC_BACK, this);
- browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this);
+ Browser* browser = browser_view_->browser();
+ browser->command_updater()->AddCommandObserver(IDC_BACK, this);
+ browser->command_updater()->AddCommandObserver(IDC_FORWARD, this);
back_menu_model_.reset(new BackForwardMenuModel(
- browser_, BackForwardMenuModel::BACKWARD_MENU));
+ browser, BackForwardMenuModel::BACKWARD_MENU));
forward_menu_model_.reset(new BackForwardMenuModel(
- browser_, BackForwardMenuModel::FORWARD_MENU));
+ browser, BackForwardMenuModel::FORWARD_MENU));
ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance();
@@ -104,8 +106,8 @@ void CompactNavigationBar::Init() {
// URL bar construction.
location_entry_.reset(new AutocompleteEditViewGtk(
- this, browser_->toolbar_model(), browser_->profile(),
- browser_->command_updater(), false, this));
+ this, browser->toolbar_model(), browser->profile(),
+ browser->command_updater(), false, this));
location_entry_->Init();
gtk_widget_show_all(location_entry_->widget());
gtk_widget_hide(location_entry_->widget());
@@ -114,6 +116,8 @@ void CompactNavigationBar::Init() {
AddChildView(location_entry_view_);
location_entry_view_->set_focus_view(this);
location_entry_view_->Attach(location_entry_->widget());
+
+ set_background(new ThemeBackground(browser_view_));
}
void CompactNavigationBar::Focus() {
@@ -176,19 +180,7 @@ void CompactNavigationBar::Layout() {
}
void CompactNavigationBar::Paint(gfx::Canvas* canvas) {
- ThemeProvider* theme = browser_->profile()->GetThemeProvider();
-
- // Fill the background.
- int image_name;
- if (browser_->window()->IsActive()) {
- image_name = browser_->profile()->IsOffTheRecord() ?
- IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME;
- } else {
- image_name = browser_->profile()->IsOffTheRecord() ?
- IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE;
- }
- SkBitmap* background = theme->GetBitmapNamed(image_name);
- canvas->TileImageInt(*background, 0, 0, width(), height());
+ PaintBackground(canvas);
// Draw a white box around the edit field so that it looks larger. This is
// kind of what the default GTK location bar does, although they have a
@@ -216,7 +208,7 @@ void CompactNavigationBar::ButtonPressed(
location_entry_->RevertAll();
break;
}
- browser_->ExecuteCommandWithDisposition(
+ browser_view_->browser()->ExecuteCommandWithDisposition(
id, event_utils::DispositionFromEventFlags(sender->mouse_event_flags()));
}
@@ -289,21 +281,22 @@ void CompactNavigationBar::EnabledStateChangedForCommand(int id, bool enabled) {
void CompactNavigationBar::AddTabWithURL(const GURL& url,
PageTransition::Type transition) {
+ Browser* browser = browser_view_->browser();
switch (StatusAreaView::GetOpenTabsMode()) {
case StatusAreaView::OPEN_TABS_ON_LEFT: {
// Add the new tab at the first non-pinned location.
- int index = browser_->tabstrip_model()->IndexOfFirstNonPinnedTab();
- browser_->AddTabWithURL(url, GURL(), transition,
+ int index = browser->tabstrip_model()->IndexOfFirstNonPinnedTab();
+ browser->AddTabWithURL(url, GURL(), transition,
true, index, true, NULL);
break;
}
case StatusAreaView::OPEN_TABS_CLOBBER: {
- browser_->GetSelectedTabContents()->controller().LoadURL(
+ browser->GetSelectedTabContents()->controller().LoadURL(
url, GURL(), transition);
break;
}
case StatusAreaView::OPEN_TABS_ON_RIGHT: {
- browser_->AddTabWithURL(url, GURL(), transition, true, -1, true, NULL);
+ browser->AddTabWithURL(url, GURL(), transition, true, -1, true, NULL);
break;
}
}
diff --git a/chrome/browser/chromeos/compact_navigation_bar.h b/chrome/browser/chromeos/compact_navigation_bar.h
index ea6bdfa..fa44038 100644
--- a/chrome/browser/chromeos/compact_navigation_bar.h
+++ b/chrome/browser/chromeos/compact_navigation_bar.h
@@ -15,7 +15,7 @@
class AutocompleteEditViewGtk;
class BackForwardMenuModel;
-class Browser;
+class BrowserView;
namespace views {
class ImageButton;
@@ -33,7 +33,7 @@ class CompactNavigationBar : public views::View,
public BubblePositioner,
public CommandUpdater::CommandObserver {
public:
- explicit CompactNavigationBar(Browser* browser);
+ explicit CompactNavigationBar(BrowserView* browser_view);
virtual ~CompactNavigationBar();
// Must be called before anything else, but after adding this view to the
@@ -75,7 +75,7 @@ class CompactNavigationBar : public views::View,
// controlled by the method |StatusAreaView::GetOpenTabsMode()|.
void AddTabWithURL(const GURL& url, PageTransition::Type transition);
- Browser* browser_;
+ BrowserView* browser_view_;
bool initialized_;
diff --git a/chrome/browser/chromeos/status_area_view.cc b/chrome/browser/chromeos/status_area_view.cc
index c4edc79..63f8798 100755
--- a/chrome/browser/chromeos/status_area_view.cc
+++ b/chrome/browser/chromeos/status_area_view.cc
@@ -19,12 +19,9 @@
#include "chrome/browser/chromeos/network_menu_button.h"
#include "chrome/browser/chromeos/power_menu_button.h"
#include "chrome/browser/chromeos/status_area_button.h"
-#if !defined(TOOLKIT_VIEWS)
-#include "chrome/browser/gtk/browser_window_gtk.h"
-#else
-#include "chrome/browser/views/frame/browser_view.h"
-#endif
#include "chrome/browser/profile.h"
+#include "chrome/browser/views/frame/browser_view.h"
+#include "chrome/browser/views/theme_background.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
#include "grit/chromium_strings.h"
@@ -32,6 +29,7 @@
#include "grit/theme_resources.h"
#include "views/controls/menu/menu.h"
#include "views/controls/menu/menu_2.h"
+#include "views/window/window.h"
namespace chromeos {
@@ -58,12 +56,7 @@ class OptionsMenuModel : public menus::SimpleMenuModel,
explicit OptionsMenuModel(Browser* browser)
: SimpleMenuModel(this),
browser_(browser) {
-#if defined(TOOLKIT_VIEWS)
AddItemWithStringId(IDC_COMPACT_NAVBAR, IDS_COMPACT_NAVBAR);
-#else
- AddItem(static_cast<int>(CREATE_NEW_WINDOW),
- ASCIIToUTF16("New window"));
-#endif
AddSeparator();
AddItem(static_cast<int>(StatusAreaView::OPEN_TABS_ON_LEFT),
@@ -90,21 +83,9 @@ class OptionsMenuModel : public menus::SimpleMenuModel,
}
virtual void ExecuteCommand(int command_id) {
switch (command_id) {
-#if defined(TOOLKIT_VIEWS)
case IDC_COMPACT_NAVBAR:
browser_->ExecuteCommand(command_id);
break;
-#else
- case CREATE_NEW_WINDOW:
- // Reach into the GTK browser window and enable the flag to create the
- // next window as a compact nav one.
- // TODO(brettw) this is an evil hack, and is here so this can be tested.
- // Remove it eventually.
- static_cast<BrowserWindowGtk*>(browser_->window())->
- set_next_window_should_use_compact_nav();
- browser_->ExecuteCommand(IDC_NEW_WINDOW);
- break;
-#endif
case StatusAreaView::OPEN_TABS_ON_LEFT:
case StatusAreaView::OPEN_TABS_CLOBBER:
case StatusAreaView::OPEN_TABS_ON_RIGHT:
@@ -126,10 +107,8 @@ class OptionsMenuModel : public menus::SimpleMenuModel,
StatusAreaView::OpenTabsMode StatusAreaView::open_tabs_mode_ =
StatusAreaView::OPEN_TABS_ON_LEFT;
-StatusAreaView::StatusAreaView(Browser* browser,
- gfx::NativeWindow window)
- : browser_(browser),
- window_(window),
+StatusAreaView::StatusAreaView(BrowserView* browser_view)
+ : browser_view_(browser_view),
clock_view_(NULL),
language_view_(NULL),
network_view_(NULL),
@@ -138,14 +117,14 @@ StatusAreaView::StatusAreaView(Browser* browser,
}
void StatusAreaView::Init() {
- ThemeProvider* theme = browser_->profile()->GetThemeProvider();
-
+ ThemeProvider* theme = browser_view_->frame()->GetThemeProviderForFrame();
+ Browser* browser = browser_view_->browser();
// Language.
- language_view_ = new LanguageMenuButton(browser_);
+ language_view_ = new LanguageMenuButton(browser);
AddChildView(language_view_);
// Clock.
- clock_view_ = new ClockMenuButton(browser_);
+ clock_view_ = new ClockMenuButton(browser);
AddChildView(clock_view_);
// Battery.
@@ -153,23 +132,21 @@ void StatusAreaView::Init() {
AddChildView(battery_view_);
// Network.
- network_view_ = new NetworkMenuButton(window_);
+ network_view_ = new NetworkMenuButton(
+ browser_view_->GetWindow()->GetNativeWindow());
+
AddChildView(network_view_);
// Menu.
menu_view_ = new StatusAreaButton(this);
menu_view_->SetIcon(*theme->GetBitmapNamed(IDR_STATUSBAR_MENU));
AddChildView(menu_view_);
+
+ set_background(new ThemeBackground(browser_view_));
}
void StatusAreaView::Update() {
-#if defined(TOOLKIT_VIEWS)
- // We only turn on/off the menu for views because
- // gtk version will not hide the toolbar in compact
- // navigation bar mode.
- menu_view_->SetVisible(
- !browser_->window()->IsToolbarVisible());
-#endif
+ menu_view_->SetVisible(!browser_view_->IsToolbarVisible());
}
gfx::Size StatusAreaView::GetPreferredSize() {
@@ -214,26 +191,6 @@ void StatusAreaView::Layout() {
}
}
-void StatusAreaView::Paint(gfx::Canvas* canvas) {
- ThemeProvider* theme = browser_->profile()->GetThemeProvider();
-
- // Fill the background.
- int image_name;
- if (browser_->window()->IsActive()) {
- image_name = browser_->profile()->IsOffTheRecord() ?
- IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME;
- } else {
- image_name = browser_->profile()->IsOffTheRecord() ?
- IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE;
- }
- SkBitmap* background = theme->GetBitmapNamed(image_name);
- canvas->TileImageInt(
- *background,
- 0, kCustomFrameBackgroundVerticalOffset,
- 0, 0,
- width(), height());
-}
-
// static
StatusAreaView::OpenTabsMode StatusAreaView::GetOpenTabsMode() {
return open_tabs_mode_;
@@ -248,7 +205,7 @@ void StatusAreaView::CreateAppMenu() {
if (app_menu_contents_.get())
return;
- options_menu_contents_.reset(new OptionsMenuModel(browser_));
+ options_menu_contents_.reset(new OptionsMenuModel(browser_view_->browser()));
app_menu_contents_.reset(new menus::SimpleMenuModel(this));
app_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
@@ -291,14 +248,16 @@ void StatusAreaView::CreateAppMenu() {
bool StatusAreaView::IsCommandIdChecked(int command_id) const {
if (command_id == IDC_SHOW_BOOKMARK_BAR)
- return browser_->profile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar);
+ return browser_view_->browser()->profile()->GetPrefs()->GetBoolean(
+ prefs::kShowBookmarkBar);
return false;
}
bool StatusAreaView::IsCommandIdEnabled(int command_id) const {
+ Browser* browser = browser_view_->browser();
if (command_id == IDC_RESTORE_TAB)
- return browser_->CanRestoreTab();
- return browser_->command_updater()->IsCommandEnabled(command_id);
+ return browser->CanRestoreTab();
+ return browser->command_updater()->IsCommandEnabled(command_id);
}
bool StatusAreaView::GetAcceleratorForCommandId(
@@ -308,7 +267,7 @@ bool StatusAreaView::GetAcceleratorForCommandId(
}
void StatusAreaView::ExecuteCommand(int command_id) {
- browser_->ExecuteCommand(command_id);
+ browser_view_->browser()->ExecuteCommand(command_id);
}
void StatusAreaView::RunMenu(views::View* source, const gfx::Point& pt) {
diff --git a/chrome/browser/chromeos/status_area_view.h b/chrome/browser/chromeos/status_area_view.h
index ee3a172..12b7804 100644
--- a/chrome/browser/chromeos/status_area_view.h
+++ b/chrome/browser/chromeos/status_area_view.h
@@ -12,7 +12,7 @@
#include "views/controls/menu/menu_2.h"
#include "views/view.h"
-class Browser;
+class BrowserView;
namespace chromeos {
@@ -34,9 +34,7 @@ class StatusAreaView : public views::View,
OPEN_TABS_ON_RIGHT
};
- // NOTE: this takes the handle to the window as browser->window() may not
- // have been assigned yet.
- StatusAreaView(Browser* browser, gfx::NativeWindow window);
+ explicit StatusAreaView(BrowserView* browser_view);
virtual ~StatusAreaView() {}
void Init();
@@ -48,7 +46,6 @@ class StatusAreaView : public views::View,
// views::View* overrides.
virtual gfx::Size GetPreferredSize();
virtual void Layout();
- virtual void Paint(gfx::Canvas* canvas);
static OpenTabsMode GetOpenTabsMode();
static void SetOpenTabsMode(OpenTabsMode mode);
@@ -67,11 +64,7 @@ class StatusAreaView : public views::View,
virtual void RunMenu(views::View* source, const gfx::Point& pt);
// The browser window that owns us.
- Browser* browser_;
-
- // Browser's NativeWindow. See description above constructor as to why this
- // is cached.
- gfx::NativeWindow window_;
+ BrowserView* browser_view_;
ClockMenuButton* clock_view_;
LanguageMenuButton* language_view_;
diff --git a/chrome/browser/views/frame/browser_frame.h b/chrome/browser/views/frame/browser_frame.h
index efc64a1..08376a0d 100644
--- a/chrome/browser/views/frame/browser_frame.h
+++ b/chrome/browser/views/frame/browser_frame.h
@@ -63,6 +63,9 @@ class BrowserFrame {
// if there are no themes applied on Vista, or if there are themes applied and
// this browser window is an app or popup.
virtual bool AlwaysUseNativeFrame() const = 0;
+
+ // Returns the NonClientFrameView of this frame.
+ virtual views::View* GetFrameView() const = 0;
};
#endif // CHROME_BROWSER_VIEWS_FRAME_BROWSER_FRAME_H_
diff --git a/chrome/browser/views/frame/browser_frame_gtk.cc b/chrome/browser/views/frame/browser_frame_gtk.cc
index a496db9..dfd7717 100644
--- a/chrome/browser/views/frame/browser_frame_gtk.cc
+++ b/chrome/browser/views/frame/browser_frame_gtk.cc
@@ -124,6 +124,10 @@ bool BrowserFrameGtk::AlwaysUseNativeFrame() const {
return false;
}
+views::View* BrowserFrameGtk::GetFrameView() const {
+ return browser_frame_view_;
+}
+
ThemeProvider* BrowserFrameGtk::GetThemeProvider() const {
return profile_->GetThemeProvider();
}
diff --git a/chrome/browser/views/frame/browser_frame_gtk.h b/chrome/browser/views/frame/browser_frame_gtk.h
index 76271d4..c045b3d 100644
--- a/chrome/browser/views/frame/browser_frame_gtk.h
+++ b/chrome/browser/views/frame/browser_frame_gtk.h
@@ -33,6 +33,7 @@ class BrowserFrameGtk : public BrowserFrame,
virtual void ContinueDraggingDetachedTab();
virtual ThemeProvider* GetThemeProviderForFrame() const;
virtual bool AlwaysUseNativeFrame() const;
+ virtual views::View* GetFrameView() const;
// Overridden from views::Widget:
virtual ThemeProvider* GetThemeProvider() const;
diff --git a/chrome/browser/views/frame/browser_frame_win.cc b/chrome/browser/views/frame/browser_frame_win.cc
index 1af9353..61aa053 100644
--- a/chrome/browser/views/frame/browser_frame_win.cc
+++ b/chrome/browser/views/frame/browser_frame_win.cc
@@ -107,6 +107,10 @@ bool BrowserFrameWin::AlwaysUseNativeFrame() const {
win_util::ShouldUseVistaFrame());
}
+views::View* BrowserFrameWin::GetFrameView() const {
+ return browser_frame_view_;
+}
+
///////////////////////////////////////////////////////////////////////////////
// BrowserFrame, views::WindowWin overrides:
diff --git a/chrome/browser/views/frame/browser_frame_win.h b/chrome/browser/views/frame/browser_frame_win.h
index 94943e4..3482df9 100644
--- a/chrome/browser/views/frame/browser_frame_win.h
+++ b/chrome/browser/views/frame/browser_frame_win.h
@@ -44,6 +44,7 @@ class BrowserFrameWin : public BrowserFrame, public views::WindowWin {
virtual void ContinueDraggingDetachedTab();
virtual ThemeProvider* GetThemeProviderForFrame() const;
virtual bool AlwaysUseNativeFrame() const;
+ virtual views::View* GetFrameView() const;
protected:
// Overridden from views::WindowWin:
diff --git a/chrome/browser/views/theme_background.cc b/chrome/browser/views/theme_background.cc
new file mode 100644
index 0000000..e1dc104
--- /dev/null
+++ b/chrome/browser/views/theme_background.cc
@@ -0,0 +1,47 @@
+// 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/theme_background.h"
+
+#include "app/gfx/canvas.h"
+#include "chrome/browser/browser_theme_provider.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/views/frame/browser_view.h"
+#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+#include "views/view.h"
+
+ThemeBackground::ThemeBackground(BrowserView* browser_view)
+ : browser_view_(browser_view) {
+}
+
+void ThemeBackground::Paint(gfx::Canvas* canvas, views::View* view) const {
+ int image_name;
+ Browser* browser = browser_view_->browser();
+ if (browser->window()->IsActive()) {
+ image_name = browser->profile()->IsOffTheRecord() ?
+ IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME;
+ } else {
+ image_name = browser->profile()->IsOffTheRecord() ?
+ IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE;
+ }
+ ThemeProvider* theme = browser->profile()->GetThemeProvider();
+ SkBitmap* background = theme->GetBitmapNamed(image_name);
+
+ gfx::Point origin(0, 0);
+ views::View::ConvertPointToView(view,
+ browser_view_->frame()->GetFrameView(),
+ &origin);
+#if defined(OS_CHROMEOS)
+ const int kCustomFrameBackgroundVerticalOffset = 15;
+ // TODO(oshima): Remove this once we fully migrated to views.
+ // See http://crbug.com/28580.
+ if (browser_view_->IsMaximized()) {
+ origin.Offset(0, kCustomFrameBackgroundVerticalOffset + 1);
+ }
+#endif
+ canvas->TileImageInt(*background,
+ origin.x(), origin.y(), 0, 0,
+ view->width(), view->height());
+}
diff --git a/chrome/browser/views/theme_background.h b/chrome/browser/views/theme_background.h
new file mode 100644
index 0000000..31f568e
--- /dev/null
+++ b/chrome/browser/views/theme_background.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef CHROME_BROWSER_VIEWS_THEME_BACKGROUND_H_
+#define CHROME_BROWSER_VIEWS_THEME_BACKGROUND_H_
+
+#include "views/background.h"
+
+class BrowserView;
+
+namespace views {
+class View;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// ThemeBackground class.
+//
+// A ThemeBackground is used to paint the background theme image in a
+// view in such a way that it's consistent with the frame's theme
+// image. It takes care of active/inactive state, incognito state and
+// the offset from the frame view.
+//
+////////////////////////////////////////////////////////////////////////////////
+class ThemeBackground : public views::Background {
+ public:
+ explicit ThemeBackground(BrowserView* browser);
+ virtual ~ThemeBackground() {}
+
+ // Overridden from views:;Background.
+ virtual void Paint(gfx::Canvas* canvas, views::View* view) const;
+
+ private:
+ BrowserView* browser_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(ThemeBackground);
+};
+
+#endif // CHROME_BROWSER_VIEWS_THEME_BACKGROUND_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 16d33a9..6f22a6c 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1827,6 +1827,8 @@
'browser/views/tabs/tab_strip.cc',
'browser/views/tabs/tab_strip.h',
'browser/views/task_manager_view.cc',
+ 'browser/views/theme_background.cc',
+ 'browser/views/theme_background.h',
'browser/views/theme_helpers.cc',
'browser/views/theme_helpers.h',
'browser/views/theme_install_bubble_view.cc',
@@ -2276,6 +2278,8 @@
['include', '^browser/views/tabs/tab_strip.h'],
['include', '^browser/views/tabs/tab_strip_2.cc'],
['include', '^browser/views/tabs/tab_strip_2.h'],
+ ['include', '^browser/views/theme_background.cc'],
+ ['include', '^browser/views/theme_background.h'],
['include', '^browser/views/toolbar_view.cc'],
['include', '^browser/views/toolbar_view.h'],
['include', '^browser/window_sizer.cc'],