Index: chrome/browser/gtk/download_item_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/download_item_gtk.cc (revision 10937) |
+++ chrome/browser/gtk/download_item_gtk.cc (working copy) |
@@ -12,10 +12,22 @@ |
#include "grit/theme_resources.h" |
-NineBox* DownloadItemGtk::nine_box_normal_ = NULL; |
-NineBox* DownloadItemGtk::nine_box_prelight_ = NULL; |
-NineBox* DownloadItemGtk::nine_box_active_ = NULL; |
+namespace { |
+// The width of the |menu_button_| widget. It has to be at least as wide as the |
+// bitmap that we use to draw it, i.e. 16, but can be more. |
+const int kMenuButtonWidth = 16; |
+ |
+} |
Dean McNamee
2009/03/05 14:16:01
// namespace
|
+ |
+NineBox* DownloadItemGtk::body_nine_box_normal_ = NULL; |
+NineBox* DownloadItemGtk::body_nine_box_prelight_ = NULL; |
+NineBox* DownloadItemGtk::body_nine_box_active_ = NULL; |
+ |
+NineBox* DownloadItemGtk::menu_nine_box_normal_ = NULL; |
+NineBox* DownloadItemGtk::menu_nine_box_prelight_ = NULL; |
+NineBox* DownloadItemGtk::menu_nine_box_active_ = NULL; |
+ |
DownloadItemGtk::DownloadItemGtk(BaseDownloadItemModel* download_model, |
GtkWidget* parent_shelf) |
: download_model_(download_model), |
@@ -25,21 +37,29 @@ |
body_ = gtk_button_new(); |
gtk_widget_set_app_paintable(body_, TRUE); |
g_signal_connect(G_OBJECT(body_), "expose-event", |
- G_CALLBACK(OnBodyExpose), this); |
- |
- GtkWidget* label = gtk_label_new(download_model->download()->file_name() |
+ G_CALLBACK(OnExpose), this); |
+ GTK_WIDGET_UNSET_FLAGS(body_, GTK_CAN_FOCUS); |
+ GtkWidget* label = gtk_label_new(download_model->download()->GetFileName() |
Dean McNamee
2009/03/05 14:16:01
I would have wrapped this at the first ( if it's p
|
.value().c_str()); |
gtk_container_add(GTK_CONTAINER(body_), label); |
+ menu_button_ = gtk_button_new(); |
+ gtk_widget_set_app_paintable(menu_button_, TRUE); |
+ GTK_WIDGET_UNSET_FLAGS(menu_button_, GTK_CAN_FOCUS); |
+ g_signal_connect(G_OBJECT(menu_button_), "expose-event", |
+ G_CALLBACK(OnExpose), this); |
+ gtk_widget_set_size_request(menu_button_, kMenuButtonWidth, 0); |
+ |
hbox_ = gtk_hbox_new(FALSE, 0); |
gtk_box_pack_start(GTK_BOX(hbox_), body_, FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(hbox_), menu_button_, FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(parent_shelf), hbox_, FALSE, FALSE, 0); |
gtk_widget_show_all(hbox_); |
} |
// static |
void DownloadItemGtk::InitNineBoxes() { |
- if (nine_box_normal_) |
+ if (body_nine_box_normal_) |
return; |
GdkPixbuf* images[9]; |
@@ -55,7 +75,7 @@ |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM); |
- nine_box_normal_ = new NineBox(images); |
+ body_nine_box_normal_ = new NineBox(images); |
i = 0; |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_H); |
@@ -67,7 +87,7 @@ |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_H); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_H); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_H); |
- nine_box_prelight_ = new NineBox(images); |
+ body_nine_box_prelight_ = new NineBox(images); |
i = 0; |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_P); |
@@ -79,19 +99,57 @@ |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_P); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_P); |
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_P); |
- nine_box_active_ = new NineBox(images); |
+ body_nine_box_active_ = new NineBox(images); |
+ |
+ i = 0; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ menu_nine_box_normal_ = new NineBox(images); |
+ |
+ i = 0; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_H); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_H); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_H); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ menu_nine_box_prelight_ = new NineBox(images); |
+ |
+ i = 0; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_P); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_P); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_P); |
+ images[i++] = NULL; |
+ images[i++] = NULL; |
+ menu_nine_box_active_ = new NineBox(images); |
} |
// static |
-gboolean DownloadItemGtk::OnBodyExpose(GtkWidget* widget, GdkEventExpose* e, |
- DownloadItemGtk* download_item) { |
+gboolean DownloadItemGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e, |
+ DownloadItemGtk* download_item) { |
NineBox* nine_box = NULL; |
+ // If true, this widget is |body_|, otherwise it is |menu_button_|. |
+ bool is_body = widget == download_item->body_; |
if (GTK_WIDGET_STATE(widget) == GTK_STATE_PRELIGHT) |
- nine_box = nine_box_prelight_; |
+ nine_box = is_body ? body_nine_box_prelight_ : menu_nine_box_prelight_; |
else if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) |
- nine_box = nine_box_active_; |
+ nine_box = is_body ? body_nine_box_active_ : menu_nine_box_active_; |
else |
- nine_box = nine_box_normal_; |
+ nine_box = is_body ? body_nine_box_normal_ : menu_nine_box_normal_; |
GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, |
true, // alpha |
@@ -110,11 +168,10 @@ |
gdk_pixbuf_unref(pixbuf); |
- gtk_container_propagate_expose(GTK_CONTAINER(widget), |
- gtk_bin_get_child(GTK_BIN(widget)), |
- e); |
+ GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget)); |
+ if (child) |
+ gtk_container_propagate_expose(GTK_CONTAINER(widget), child, e); |
return TRUE; |
} |
- |