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

Side by Side Diff: chrome/browser/views/browser_actions_container.cc

Issue 286001: Allow slightly larger browser and page action icons. (Closed)
Patch Set: erikkay comments Created 11 years, 2 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
« no previous file with comments | « chrome/browser/gtk/location_bar_view_gtk.cc ('k') | chrome/browser/views/location_bar_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/views/browser_actions_container.h" 5 #include "chrome/browser/views/browser_actions_container.h"
6 6
7 #include "app/gfx/canvas.h" 7 #include "app/gfx/canvas.h"
8 #include "app/resource_bundle.h" 8 #include "app/resource_bundle.h"
9 #include "base/stl_util-inl.h" 9 #include "base/stl_util-inl.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/extensions/extension_browser_event_router.h" 11 #include "chrome/browser/extensions/extension_browser_event_router.h"
12 #include "chrome/browser/extensions/extensions_service.h" 12 #include "chrome/browser/extensions/extensions_service.h"
13 #include "chrome/browser/extensions/extension_tabs_module.h" 13 #include "chrome/browser/extensions/extension_tabs_module.h"
14 #include "chrome/browser/extensions/image_loading_tracker.h" 14 #include "chrome/browser/extensions/image_loading_tracker.h"
15 #include "chrome/browser/profile.h" 15 #include "chrome/browser/profile.h"
16 #include "chrome/browser/view_ids.h" 16 #include "chrome/browser/view_ids.h"
17 #include "chrome/browser/views/extensions/extension_popup.h" 17 #include "chrome/browser/views/extensions/extension_popup.h"
18 #include "chrome/browser/views/toolbar_view.h" 18 #include "chrome/browser/views/toolbar_view.h"
19 #include "chrome/common/extensions/extension_action.h" 19 #include "chrome/common/extensions/extension_action.h"
20 #include "chrome/common/notification_source.h" 20 #include "chrome/common/notification_source.h"
21 #include "chrome/common/notification_type.h" 21 #include "chrome/common/notification_type.h"
22 #include "grit/app_resources.h" 22 #include "grit/app_resources.h"
23 #include "third_party/skia/include/core/SkBitmap.h" 23 #include "third_party/skia/include/core/SkBitmap.h"
24 #include "third_party/skia/include/core/SkTypeface.h" 24 #include "third_party/skia/include/core/SkTypeface.h"
25 #include "third_party/skia/include/effects/SkGradientShader.h" 25 #include "third_party/skia/include/effects/SkGradientShader.h"
26 #include "views/controls/button/menu_button.h" 26 #include "views/controls/button/menu_button.h"
27 #include "views/controls/button/text_button.h" 27 #include "views/controls/button/text_button.h"
28 28
29 // The size of the icon for page actions. 29 // The size (both dimensions) of the buttons for page actions.
30 static const int kIconSize = 29; 30 static const int kButtonSize = 29;
31 31
32 // The padding between the browser actions and the omnibox/page menu. 32 // The padding between the browser actions and the omnibox/page menu.
33 static const int kHorizontalPadding = 4; 33 static const int kHorizontalPadding = 4;
34 34
35 // This is the same value from toolbar.cc. We position the browser actions 35 // This is the same value from toolbar.cc. We position the browser actions
36 // container flush with the edges of the toolbar as a special case so that we 36 // container flush with the edges of the toolbar as a special case so that we
37 // can draw the badge outside the visual bounds of the container. 37 // can draw the badge outside the visual bounds of the container.
38 static const int kControlVertOffset = 6; 38 static const int kControlVertOffset = 6;
39 39
40 // The maximum of the minimum number of browser actions present when there is 40 // The maximum of the minimum number of browser actions present when there is
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 132
133 // Load the images this view needs asynchronously on the file thread. We'll 133 // Load the images this view needs asynchronously on the file thread. We'll
134 // get a call back into OnImageLoaded if the image loads successfully. If not, 134 // get a call back into OnImageLoaded if the image loads successfully. If not,
135 // the ImageView will have no image and will not appear in the browser chrome. 135 // the ImageView will have no image and will not appear in the browser chrome.
136 if (!browser_action->icon_paths().empty()) { 136 if (!browser_action->icon_paths().empty()) {
137 const std::vector<std::string>& icon_paths = browser_action->icon_paths(); 137 const std::vector<std::string>& icon_paths = browser_action->icon_paths();
138 browser_action_icons_.resize(icon_paths.size()); 138 browser_action_icons_.resize(icon_paths.size());
139 tracker_ = new ImageLoadingTracker(this, icon_paths.size()); 139 tracker_ = new ImageLoadingTracker(this, icon_paths.size());
140 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); 140 for (std::vector<std::string>::const_iterator iter = icon_paths.begin();
141 iter != icon_paths.end(); ++iter) { 141 iter != icon_paths.end(); ++iter) {
142 tracker_->PostLoadImageTask(extension->GetResource(*iter)); 142 tracker_->PostLoadImageTask(
143 extension->GetResource(*iter),
144 gfx::Size(Extension::kBrowserActionIconMaxSize,
145 Extension::kBrowserActionIconMaxSize));
143 } 146 }
144 } 147 }
145 148
146 registrar_.Add(this, NotificationType::EXTENSION_BROWSER_ACTION_UPDATED, 149 registrar_.Add(this, NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
147 Source<ExtensionAction>(browser_action_)); 150 Source<ExtensionAction>(browser_action_));
148 } 151 }
149 152
150 BrowserActionButton::~BrowserActionButton() { 153 BrowserActionButton::~BrowserActionButton() {
151 if (tracker_) { 154 if (tracker_) {
152 tracker_->StopTrackingImageLoad(); 155 tracker_->StopTrackingImageLoad();
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 }; 285 };
283 286
284 BrowserActionView::BrowserActionView(ExtensionAction* browser_action, 287 BrowserActionView::BrowserActionView(ExtensionAction* browser_action,
285 Extension* extension, 288 Extension* extension,
286 BrowserActionsContainer* panel) { 289 BrowserActionsContainer* panel) {
287 button_ = new BrowserActionButton(browser_action, extension, panel); 290 button_ = new BrowserActionButton(browser_action, extension, panel);
288 AddChildView(button_); 291 AddChildView(button_);
289 } 292 }
290 293
291 void BrowserActionView::Layout() { 294 void BrowserActionView::Layout() {
292 button_->SetBounds(0, kControlVertOffset, width(), 295 button_->SetBounds(0, kControlVertOffset, width(), kButtonSize);
293 height() - 2 * kControlVertOffset);
294 } 296 }
295 297
296 void BrowserActionView::PaintChildren(gfx::Canvas* canvas) { 298 void BrowserActionView::PaintChildren(gfx::Canvas* canvas) {
297 View::PaintChildren(canvas); 299 View::PaintChildren(canvas);
298 300
299 const std::string& text = button_->browser_action_state()->badge_text(); 301 const std::string& text = button_->browser_action_state()->badge_text();
300 if (text.empty()) 302 if (text.empty())
301 return; 303 return;
302 304
303 const int kTextSize = 8; 305 const int kTextSize = 8;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 490
489 // Otherwise, we send the action to the extension. 491 // Otherwise, we send the action to the extension.
490 ExtensionBrowserEventRouter::GetInstance()->BrowserActionExecuted( 492 ExtensionBrowserEventRouter::GetInstance()->BrowserActionExecuted(
491 profile_, browser_action.extension_id(), toolbar_->browser()); 493 profile_, browser_action.extension_id(), toolbar_->browser());
492 } 494 }
493 495
494 gfx::Size BrowserActionsContainer::GetPreferredSize() { 496 gfx::Size BrowserActionsContainer::GetPreferredSize() {
495 if (browser_action_views_.empty()) 497 if (browser_action_views_.empty())
496 return gfx::Size(0, 0); 498 return gfx::Size(0, 0);
497 int width = kHorizontalPadding * 2 + 499 int width = kHorizontalPadding * 2 +
498 browser_action_views_.size() * kIconSize; 500 browser_action_views_.size() * kButtonSize;
499 return gfx::Size(width, kIconSize); 501 return gfx::Size(width, kButtonSize);
500 } 502 }
501 503
502 void BrowserActionsContainer::Layout() { 504 void BrowserActionsContainer::Layout() {
503 for (size_t i = 0; i < browser_action_views_.size(); ++i) { 505 for (size_t i = 0; i < browser_action_views_.size(); ++i) {
504 BrowserActionView* view = browser_action_views_[i]; 506 BrowserActionView* view = browser_action_views_[i];
505 int x = kHorizontalPadding + i * kIconSize; 507 int x = kHorizontalPadding + i * kButtonSize;
506 if (x + kIconSize <= width()) { 508 if (x + kButtonSize <= width()) {
507 view->SetBounds(x, 0, kIconSize, height()); 509 view->SetBounds(x, 0, kButtonSize, height());
508 view->SetVisible(true); 510 view->SetVisible(true);
509 } else { 511 } else {
510 view->SetVisible(false); 512 view->SetVisible(false);
511 } 513 }
512 } 514 }
513 } 515 }
514 516
515 void BrowserActionsContainer::Observe(NotificationType type, 517 void BrowserActionsContainer::Observe(NotificationType type,
516 const NotificationSource& source, 518 const NotificationSource& source,
517 const NotificationDetails& details) { 519 const NotificationDetails& details) {
(...skipping 29 matching lines...) Expand all
547 task_factory_.NewRunnableMethod(&BrowserActionsContainer::HidePopup)); 549 task_factory_.NewRunnableMethod(&BrowserActionsContainer::HidePopup));
548 } 550 }
549 551
550 int BrowserActionsContainer::GetClippedPreferredWidth(int available_width) { 552 int BrowserActionsContainer::GetClippedPreferredWidth(int available_width) {
551 if (browser_action_views_.size() == 0) 553 if (browser_action_views_.size() == 0)
552 return 0; 554 return 0;
553 555
554 // We have at least one browser action. Make some of them sticky. 556 // We have at least one browser action. Make some of them sticky.
555 int min_width = kHorizontalPadding * 2 + 557 int min_width = kHorizontalPadding * 2 +
556 std::min(static_cast<int>(browser_action_views_.size()), 558 std::min(static_cast<int>(browser_action_views_.size()),
557 kMinimumNumberOfVisibleBrowserActions) * kIconSize; 559 kMinimumNumberOfVisibleBrowserActions) * kButtonSize;
558 560
559 // Even if available_width is <= 0, we still return at least the |min_width|. 561 // Even if available_width is <= 0, we still return at least the |min_width|.
560 if (available_width <= 0) 562 if (available_width <= 0)
561 return min_width; 563 return min_width;
562 564
563 return std::max(min_width, available_width - available_width % kIconSize + 565 return std::max(min_width, available_width - available_width % kButtonSize +
564 kHorizontalPadding * 2); 566 kHorizontalPadding * 2);
565 } 567 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/location_bar_view_gtk.cc ('k') | chrome/browser/views/location_bar_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698