Index: chrome/browser/gtk/extension_shelf_gtk.cc |
diff --git a/chrome/browser/gtk/extension_shelf_gtk.cc b/chrome/browser/gtk/extension_shelf_gtk.cc |
index f574fe42918d41109d3b8fb2c180b2f767e933d9..121f77dade6f9a9f1ca2f92b29f40b8b87101255 100644 |
--- a/chrome/browser/gtk/extension_shelf_gtk.cc |
+++ b/chrome/browser/gtk/extension_shelf_gtk.cc |
@@ -4,16 +4,22 @@ |
#include "chrome/browser/gtk/extension_shelf_gtk.h" |
+#include "base/gfx/gtk_util.h" |
#include "chrome/browser/browser.h" |
#include "chrome/browser/gtk/browser_window_gtk.h" |
#include "chrome/browser/gtk/gtk_theme_provider.h" |
-#include "chrome/browser/gtk/nine_box.h" |
-#include "chrome/browser/gtk/tabs/tab_strip_gtk.h" |
#include "chrome/browser/profile.h" |
+#include "chrome/common/notification_service.h" |
#include "grit/app_resources.h" |
#include "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
+// Background color of the shelf. |
+static const GdkColor kBackgroundColor = GDK_COLOR_RGB(230, 237, 244); |
+ |
+// Border color (the top pixel of the shelf). |
+const GdkColor kBorderColor = GDK_COLOR_RGB(214, 214, 214); |
+ |
// Preferred height of the ExtensionShelfGtk. |
static const int kShelfHeight = 29; |
@@ -145,14 +151,38 @@ void ExtensionShelfGtk::ShelfModelDeleting() { |
model_ = NULL; |
} |
+void ExtensionShelfGtk::Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ DCHECK(type == NotificationType::BROWSER_THEME_CHANGED); |
+ if (theme_provider_->UseGtkTheme()) { |
+ GdkColor color = theme_provider_->GetBorderColor(); |
+ gtk_widget_modify_bg(top_border_, GTK_STATE_NORMAL, &color); |
+ } else { |
+ gtk_widget_modify_bg(top_border_, GTK_STATE_NORMAL, &kBorderColor); |
+ } |
+} |
+ |
void ExtensionShelfGtk::Init(Profile* profile) { |
+ top_border_ = gtk_event_box_new(); |
+ gtk_widget_set_size_request(GTK_WIDGET(top_border_), 0, 1); |
+ |
+ // The event box provides a background for the shelf and is its top-level |
+ // widget. |
event_box_.Own(gtk_event_box_new()); |
+ gtk_widget_modify_bg(event_box_.get(), GTK_STATE_NORMAL, &kBackgroundColor); |
Elliot Glaysher
2009/08/26 21:42:39
A question: Why is this a hardcoded value instead
|
shelf_hbox_ = gtk_hbox_new(FALSE, 0); |
- gtk_widget_set_app_paintable(shelf_hbox_, TRUE); |
- g_signal_connect(G_OBJECT(shelf_hbox_), "expose-event", |
- G_CALLBACK(&OnHBoxExpose), this); |
- gtk_container_add(GTK_CONTAINER(event_box_.get()), shelf_hbox_); |
+ |
+ GtkWidget* vbox = gtk_vbox_new(FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(vbox), top_border_, FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(vbox), shelf_hbox_, FALSE, FALSE, 0); |
+ |
+ gtk_container_add(GTK_CONTAINER(event_box_.get()), vbox); |
+ |
+ theme_provider_->InitThemesFor(this); |
+ registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, |
+ NotificationService::AllSources()); |
LoadFromModel(); |
model_->AddObserver(this); |
@@ -165,7 +195,7 @@ void ExtensionShelfGtk::AdjustHeight() { |
DCHECK(toolstrips_.empty()); |
Hide(); |
} else { |
- gtk_widget_set_size_request(event_box_.get(), -1, kShelfHeight); |
+ gtk_widget_set_size_request(shelf_hbox_, -1, kShelfHeight); |
Show(); |
} |
} |
@@ -181,29 +211,3 @@ void ExtensionShelfGtk::LoadFromModel() { |
ExtensionShelfGtk::Toolstrip* ExtensionShelfGtk::ToolstripAtIndex(int index) { |
return static_cast<Toolstrip*>(model_->ToolstripAt(index).data); |
} |
- |
-// static |
-gboolean ExtensionShelfGtk::OnHBoxExpose(GtkWidget* widget, |
- GdkEventExpose* event, |
- ExtensionShelfGtk* bar) { |
- // Paint the background theme image. |
- cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); |
- cairo_rectangle(cr, event->area.x, event->area.y, |
- event->area.width, event->area.height); |
- cairo_clip(cr); |
- gfx::Point tabstrip_origin = |
- static_cast<BrowserWindowGtk*>(bar->browser_->window())-> |
- tabstrip()->GetTabStripOriginForWidget(widget); |
- GdkPixbuf* background = bar->browser_->profile()->GetThemeProvider()-> |
- GetPixbufNamed(IDR_THEME_TOOLBAR); |
- gdk_cairo_set_source_pixbuf(cr, background, |
- tabstrip_origin.x(), tabstrip_origin.y()); |
- cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); |
- cairo_rectangle(cr, tabstrip_origin.x(), tabstrip_origin.y(), |
- event->area.x + event->area.width - tabstrip_origin.x(), |
- gdk_pixbuf_get_height(background)); |
- cairo_fill(cr); |
- cairo_destroy(cr); |
- |
- return FALSE; // Propagate expose to children. |
-} |