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

Side by Side Diff: chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc

Issue 10806058: Move icon fallbacks into ExtensionAction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move the icon cache inside ExtensionAction. Created 8 years, 4 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/gtk/browser_actions_toolbar_gtk.h" 5 #include "chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 DCHECK(extension_->browser_action()); 120 DCHECK(extension_->browser_action());
121 121
122 // The Browser Action API does not allow the default icon path to be 122 // The Browser Action API does not allow the default icon path to be
123 // changed at runtime, so we can load this now and cache it. 123 // changed at runtime, so we can load this now and cache it.
124 std::string path = extension_->browser_action()->default_icon_path(); 124 std::string path = extension_->browser_action()->default_icon_path();
125 if (!path.empty()) { 125 if (!path.empty()) {
126 tracker_.LoadImage(extension_, extension_->GetResource(path), 126 tracker_.LoadImage(extension_, extension_->GetResource(path),
127 gfx::Size(Extension::kBrowserActionIconMaxSize, 127 gfx::Size(Extension::kBrowserActionIconMaxSize,
128 Extension::kBrowserActionIconMaxSize), 128 Extension::kBrowserActionIconMaxSize),
129 ImageLoadingTracker::DONT_CACHE); 129 ImageLoadingTracker::DONT_CACHE);
130 } else {
131 const SkBitmap* bm =
132 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
133 IDR_EXTENSIONS_FAVICON).ToSkBitmap();
134 default_skbitmap_ = *bm;
135 default_icon_ = gfx::GdkPixbufFromSkBitmap(*bm);
136 } 130 }
137 131
138 UpdateState(); 132 UpdateState();
139 133
140 signals_.Connect(button(), "button-press-event", 134 signals_.Connect(button(), "button-press-event",
141 G_CALLBACK(OnButtonPress), this); 135 G_CALLBACK(OnButtonPress), this);
142 signals_.Connect(button(), "clicked", 136 signals_.Connect(button(), "clicked",
143 G_CALLBACK(OnClicked), this); 137 G_CALLBACK(OnClicked), this);
144 signals_.Connect(button(), "drag-begin", 138 signals_.Connect(button(), "drag-begin",
145 G_CALLBACK(&OnDragBegin), this); 139 G_CALLBACK(&OnDragBegin), this);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 default: 215 default:
222 NOTREACHED(); 216 NOTREACHED();
223 break; 217 break;
224 } 218 }
225 } 219 }
226 220
227 // ImageLoadingTracker::Observer implementation. 221 // ImageLoadingTracker::Observer implementation.
228 void OnImageLoaded(const gfx::Image& image, 222 void OnImageLoaded(const gfx::Image& image,
229 const std::string& extension_id, 223 const std::string& extension_id,
230 int index) OVERRIDE { 224 int index) OVERRIDE {
231 if (!image.IsEmpty()) { 225 extension_->browser_action()->CacheIcon(
232 default_skbitmap_ = *image.ToSkBitmap(); 226 extension_->browser_action()->default_icon_path(), image);
233 default_icon_ =
234 static_cast<GdkPixbuf*>(g_object_ref(image.ToGdkPixbuf()));
235 }
236 UpdateState(); 227 UpdateState();
237 } 228 }
238 229
239 // Updates the button based on the latest state from the associated 230 // Updates the button based on the latest state from the associated
240 // browser action. 231 // browser action.
241 void UpdateState() { 232 void UpdateState() {
242 int tab_id = toolbar_->GetCurrentTabId(); 233 int tab_id = toolbar_->GetCurrentTabId();
243 if (tab_id < 0) 234 if (tab_id < 0)
244 return; 235 return;
245 236
246 std::string tooltip = extension_->browser_action()->GetTitle(tab_id); 237 std::string tooltip = extension_->browser_action()->GetTitle(tab_id);
247 if (tooltip.empty()) 238 if (tooltip.empty())
248 gtk_widget_set_has_tooltip(button(), FALSE); 239 gtk_widget_set_has_tooltip(button(), FALSE);
249 else 240 else
250 gtk_widget_set_tooltip_text(button(), tooltip.c_str()); 241 gtk_widget_set_tooltip_text(button(), tooltip.c_str());
251 242
252 SkBitmap image = extension_->browser_action()->GetIcon(tab_id); 243 gfx::Image image = extension_->browser_action()->GetIcon(tab_id);
253 if (!image.isNull()) { 244 if (!image.IsEmpty())
254 GdkPixbuf* previous_gdk_icon = tab_specific_icon_; 245 SetImage(image.ToGdkPixbuf());
255 tab_specific_icon_ = gfx::GdkPixbufFromSkBitmap(image);
256 SetImage(tab_specific_icon_);
257 if (previous_gdk_icon)
258 g_object_unref(previous_gdk_icon);
259 } else if (default_icon_) {
260 SetImage(default_icon_);
261 }
262 bool enabled = extension_->browser_action()->GetIsVisible(tab_id); 246 bool enabled = extension_->browser_action()->GetIsVisible(tab_id);
263 gtk_widget_set_sensitive(button(), enabled); 247 gtk_widget_set_sensitive(button(), enabled);
264 248
265 gtk_widget_queue_draw(button()); 249 gtk_widget_queue_draw(button());
266 } 250 }
267 251
268 SkBitmap GetIcon() { 252 SkBitmap GetIcon() {
269 const SkBitmap& image = extension_->browser_action()->GetIcon( 253 return *extension_->browser_action()->GetIcon(
270 toolbar_->GetCurrentTabId()); 254 toolbar_->GetCurrentTabId()).ToSkBitmap();
271 if (!image.isNull()) {
272 return image;
273 } else {
274 return default_skbitmap_;
275 }
276 } 255 }
277 256
278 MenuGtk* GetContextMenu() { 257 MenuGtk* GetContextMenu() {
279 if (!extension_->ShowConfigureContextMenus()) 258 if (!extension_->ShowConfigureContextMenus())
280 return NULL; 259 return NULL;
281 260
282 context_menu_model_ = 261 context_menu_model_ =
283 new ExtensionContextMenuModel(extension_, toolbar_->browser(), this); 262 new ExtensionContextMenuModel(extension_, toolbar_->browser(), this);
284 context_menu_.reset( 263 context_menu_.reset(
285 new MenuGtk(this, context_menu_model_.get())); 264 new MenuGtk(this, context_menu_model_.get()));
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 1093
1115 menu->PopupAsContext(gfx::Point(event->x_root, event->y_root), 1094 menu->PopupAsContext(gfx::Point(event->x_root, event->y_root),
1116 event->time); 1095 event->time);
1117 return TRUE; 1096 return TRUE;
1118 } 1097 }
1119 1098
1120 void BrowserActionsToolbarGtk::OnButtonShowOrHide(GtkWidget* sender) { 1099 void BrowserActionsToolbarGtk::OnButtonShowOrHide(GtkWidget* sender) {
1121 if (!resize_animation_.is_animating()) 1100 if (!resize_animation_.is_animating())
1122 UpdateChevronVisibility(); 1101 UpdateChevronVisibility();
1123 } 1102 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698