Chromium Code Reviews| 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; |
| } |
| - |