Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: chrome/browser/gtk/download_item_gtk.cc

Issue 40139: Put the dropdown menu button on the linux download shelf.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/gtk/download_item_gtk.h" 5 #include "chrome/browser/gtk/download_item_gtk.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "chrome/browser/download/download_item_model.h" 8 #include "chrome/browser/download/download_item_model.h"
9 #include "chrome/browser/download/download_manager.h" 9 #include "chrome/browser/download/download_manager.h"
10 #include "chrome/browser/gtk/nine_box.h" 10 #include "chrome/browser/gtk/nine_box.h"
11 #include "chrome/common/resource_bundle.h" 11 #include "chrome/common/resource_bundle.h"
12 12
13 #include "grit/theme_resources.h" 13 #include "grit/theme_resources.h"
14 14
15 NineBox* DownloadItemGtk::nine_box_normal_ = NULL; 15 namespace {
16 NineBox* DownloadItemGtk::nine_box_prelight_ = NULL; 16
17 NineBox* DownloadItemGtk::nine_box_active_ = NULL; 17 // The width of the |menu_button_| widget. It has to be at least as wide as the
18 // bitmap that we use to draw it, i.e. 16, but can be more.
19 const int kMenuButtonWidth = 16;
20
21 }
Dean McNamee 2009/03/05 14:16:01 // namespace
22
23 NineBox* DownloadItemGtk::body_nine_box_normal_ = NULL;
24 NineBox* DownloadItemGtk::body_nine_box_prelight_ = NULL;
25 NineBox* DownloadItemGtk::body_nine_box_active_ = NULL;
26
27 NineBox* DownloadItemGtk::menu_nine_box_normal_ = NULL;
28 NineBox* DownloadItemGtk::menu_nine_box_prelight_ = NULL;
29 NineBox* DownloadItemGtk::menu_nine_box_active_ = NULL;
18 30
19 DownloadItemGtk::DownloadItemGtk(BaseDownloadItemModel* download_model, 31 DownloadItemGtk::DownloadItemGtk(BaseDownloadItemModel* download_model,
20 GtkWidget* parent_shelf) 32 GtkWidget* parent_shelf)
21 : download_model_(download_model), 33 : download_model_(download_model),
22 parent_shelf_(parent_shelf) { 34 parent_shelf_(parent_shelf) {
23 InitNineBoxes(); 35 InitNineBoxes();
24 36
25 body_ = gtk_button_new(); 37 body_ = gtk_button_new();
26 gtk_widget_set_app_paintable(body_, TRUE); 38 gtk_widget_set_app_paintable(body_, TRUE);
27 g_signal_connect(G_OBJECT(body_), "expose-event", 39 g_signal_connect(G_OBJECT(body_), "expose-event",
28 G_CALLBACK(OnBodyExpose), this); 40 G_CALLBACK(OnExpose), this);
29 41 GTK_WIDGET_UNSET_FLAGS(body_, GTK_CAN_FOCUS);
30 GtkWidget* label = gtk_label_new(download_model->download()->file_name() 42 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
31 .value().c_str()); 43 .value().c_str());
32 gtk_container_add(GTK_CONTAINER(body_), label); 44 gtk_container_add(GTK_CONTAINER(body_), label);
33 45
46 menu_button_ = gtk_button_new();
47 gtk_widget_set_app_paintable(menu_button_, TRUE);
48 GTK_WIDGET_UNSET_FLAGS(menu_button_, GTK_CAN_FOCUS);
49 g_signal_connect(G_OBJECT(menu_button_), "expose-event",
50 G_CALLBACK(OnExpose), this);
51 gtk_widget_set_size_request(menu_button_, kMenuButtonWidth, 0);
52
34 hbox_ = gtk_hbox_new(FALSE, 0); 53 hbox_ = gtk_hbox_new(FALSE, 0);
35 gtk_box_pack_start(GTK_BOX(hbox_), body_, FALSE, FALSE, 0); 54 gtk_box_pack_start(GTK_BOX(hbox_), body_, FALSE, FALSE, 0);
55 gtk_box_pack_start(GTK_BOX(hbox_), menu_button_, FALSE, FALSE, 0);
36 gtk_box_pack_start(GTK_BOX(parent_shelf), hbox_, FALSE, FALSE, 0); 56 gtk_box_pack_start(GTK_BOX(parent_shelf), hbox_, FALSE, FALSE, 0);
37 gtk_widget_show_all(hbox_); 57 gtk_widget_show_all(hbox_);
38 } 58 }
39 59
40 // static 60 // static
41 void DownloadItemGtk::InitNineBoxes() { 61 void DownloadItemGtk::InitNineBoxes() {
42 if (nine_box_normal_) 62 if (body_nine_box_normal_)
43 return; 63 return;
44 64
45 GdkPixbuf* images[9]; 65 GdkPixbuf* images[9];
46 ResourceBundle &rb = ResourceBundle::GetSharedInstance(); 66 ResourceBundle &rb = ResourceBundle::GetSharedInstance();
47 67
48 int i = 0; 68 int i = 0;
49 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP); 69 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP);
50 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP); 70 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP);
51 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP); 71 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP);
52 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE); 72 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE);
53 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE); 73 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE);
54 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE); 74 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE);
55 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM); 75 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM);
56 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM); 76 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM);
57 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM); 77 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM);
58 nine_box_normal_ = new NineBox(images); 78 body_nine_box_normal_ = new NineBox(images);
59 79
60 i = 0; 80 i = 0;
61 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_H); 81 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_H);
62 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP_H); 82 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP_H);
63 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP_H); 83 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP_H);
64 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE_H); 84 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE_H);
65 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE_H); 85 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE_H);
66 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE_H); 86 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE_H);
67 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_H); 87 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_H);
68 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_H); 88 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_H);
69 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_H); 89 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_H);
70 nine_box_prelight_ = new NineBox(images); 90 body_nine_box_prelight_ = new NineBox(images);
71 91
72 i = 0; 92 i = 0;
73 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_P); 93 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_P);
74 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP_P); 94 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_TOP_P);
75 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP_P); 95 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_TOP_P);
76 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE_P); 96 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE_P);
77 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE_P); 97 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE_P);
78 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE_P); 98 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE_P);
79 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_P); 99 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_P);
80 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_P); 100 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_P);
81 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_P); 101 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_P);
82 nine_box_active_ = new NineBox(images); 102 body_nine_box_active_ = new NineBox(images);
103
104 i = 0;
105 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP);
106 images[i++] = NULL;
107 images[i++] = NULL;
108 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE);
109 images[i++] = NULL;
110 images[i++] = NULL;
111 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM);
112 images[i++] = NULL;
113 images[i++] = NULL;
114 menu_nine_box_normal_ = new NineBox(images);
115
116 i = 0;
117 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_H);
118 images[i++] = NULL;
119 images[i++] = NULL;
120 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_H);
121 images[i++] = NULL;
122 images[i++] = NULL;
123 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_H);
124 images[i++] = NULL;
125 images[i++] = NULL;
126 menu_nine_box_prelight_ = new NineBox(images);
127
128 i = 0;
129 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_P);
130 images[i++] = NULL;
131 images[i++] = NULL;
132 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_P);
133 images[i++] = NULL;
134 images[i++] = NULL;
135 images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_P);
136 images[i++] = NULL;
137 images[i++] = NULL;
138 menu_nine_box_active_ = new NineBox(images);
83 } 139 }
84 140
85 // static 141 // static
86 gboolean DownloadItemGtk::OnBodyExpose(GtkWidget* widget, GdkEventExpose* e, 142 gboolean DownloadItemGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e,
87 DownloadItemGtk* download_item) { 143 DownloadItemGtk* download_item) {
88 NineBox* nine_box = NULL; 144 NineBox* nine_box = NULL;
145 // If true, this widget is |body_|, otherwise it is |menu_button_|.
146 bool is_body = widget == download_item->body_;
89 if (GTK_WIDGET_STATE(widget) == GTK_STATE_PRELIGHT) 147 if (GTK_WIDGET_STATE(widget) == GTK_STATE_PRELIGHT)
90 nine_box = nine_box_prelight_; 148 nine_box = is_body ? body_nine_box_prelight_ : menu_nine_box_prelight_;
91 else if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) 149 else if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
92 nine_box = nine_box_active_; 150 nine_box = is_body ? body_nine_box_active_ : menu_nine_box_active_;
93 else 151 else
94 nine_box = nine_box_normal_; 152 nine_box = is_body ? body_nine_box_normal_ : menu_nine_box_normal_;
95 153
96 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, 154 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
97 true, // alpha 155 true, // alpha
98 8, // bits per channel 156 8, // bits per channel
99 widget->allocation.width, 157 widget->allocation.width,
100 widget->allocation.height); 158 widget->allocation.height);
101 159
102 nine_box->RenderToPixbuf(pixbuf); 160 nine_box->RenderToPixbuf(pixbuf);
103 161
104 gdk_draw_pixbuf(widget->window, 162 gdk_draw_pixbuf(widget->window,
105 widget->style->fg_gc[GTK_WIDGET_STATE(widget)], 163 widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
106 pixbuf, 164 pixbuf,
107 0, 0, 165 0, 0,
108 widget->allocation.x, widget->allocation.y, -1, -1, 166 widget->allocation.x, widget->allocation.y, -1, -1,
109 GDK_RGB_DITHER_NONE, 0, 0); 167 GDK_RGB_DITHER_NONE, 0, 0);
110 168
111 gdk_pixbuf_unref(pixbuf); 169 gdk_pixbuf_unref(pixbuf);
112 170
113 gtk_container_propagate_expose(GTK_CONTAINER(widget), 171 GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
114 gtk_bin_get_child(GTK_BIN(widget)), 172 if (child)
115 e); 173 gtk_container_propagate_expose(GTK_CONTAINER(widget), child, e);
116 174
117 return TRUE; 175 return TRUE;
118 } 176 }
119 177
120
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698