| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/views/toolbar/browser_actions_container.h" | 5 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "third_party/skia/include/core/SkColor.h" | 33 #include "third_party/skia/include/core/SkColor.h" |
| 34 #include "ui/accessibility/ax_view_state.h" | 34 #include "ui/accessibility/ax_view_state.h" |
| 35 #include "ui/base/dragdrop/drag_utils.h" | 35 #include "ui/base/dragdrop/drag_utils.h" |
| 36 #include "ui/base/l10n/l10n_util.h" | 36 #include "ui/base/l10n/l10n_util.h" |
| 37 #include "ui/base/nine_image_painter_factory.h" | 37 #include "ui/base/nine_image_painter_factory.h" |
| 38 #include "ui/base/resource/resource_bundle.h" | 38 #include "ui/base/resource/resource_bundle.h" |
| 39 #include "ui/base/theme_provider.h" | 39 #include "ui/base/theme_provider.h" |
| 40 #include "ui/gfx/animation/slide_animation.h" | 40 #include "ui/gfx/animation/slide_animation.h" |
| 41 #include "ui/gfx/canvas.h" | 41 #include "ui/gfx/canvas.h" |
| 42 #include "ui/gfx/geometry/rect.h" | 42 #include "ui/gfx/geometry/rect.h" |
| 43 #include "ui/views/controls/button/label_button_border.h" | |
| 44 #include "ui/views/controls/resize_area.h" | 43 #include "ui/views/controls/resize_area.h" |
| 45 #include "ui/views/metrics.h" | 44 #include "ui/views/metrics.h" |
| 46 #include "ui/views/painter.h" | 45 #include "ui/views/painter.h" |
| 47 #include "ui/views/widget/widget.h" | 46 #include "ui/views/widget/widget.h" |
| 48 | 47 |
| 49 using extensions::Extension; | 48 using extensions::Extension; |
| 50 | 49 |
| 51 namespace { | 50 namespace { |
| 52 | 51 |
| 53 // Horizontal spacing between most items in the container, as well as after the | 52 // Horizontal spacing between most items in the container, as well as after the |
| 54 // last item or chevron (if visible). | 53 // last item or chevron (if visible). |
| 55 const int kItemSpacing = ToolbarView::kStandardSpacing; | 54 const int kItemSpacing = ToolbarView::kStandardSpacing; |
| 56 | 55 |
| 57 // Horizontal spacing before the chevron (if visible). | 56 // Horizontal spacing before the chevron (if visible). |
| 58 const int kChevronSpacing = kItemSpacing - 2; | 57 const int kChevronSpacing = kItemSpacing - 2; |
| 59 | 58 |
| 60 // A version of MenuButton with almost empty insets to fit properly on the | |
| 61 // toolbar. | |
| 62 class ChevronMenuButton : public views::MenuButton { | |
| 63 public: | |
| 64 ChevronMenuButton(views::ButtonListener* listener, | |
| 65 const base::string16& text, | |
| 66 views::MenuButtonListener* menu_button_listener, | |
| 67 bool show_menu_marker) | |
| 68 : views::MenuButton(listener, | |
| 69 text, | |
| 70 menu_button_listener, | |
| 71 show_menu_marker) { | |
| 72 } | |
| 73 | |
| 74 virtual ~ChevronMenuButton() {} | |
| 75 | |
| 76 virtual scoped_ptr<views::LabelButtonBorder> CreateDefaultBorder() const | |
| 77 OVERRIDE { | |
| 78 // The chevron resource was designed to not have any insets. | |
| 79 scoped_ptr<views::LabelButtonBorder> border = | |
| 80 views::MenuButton::CreateDefaultBorder(); | |
| 81 border->set_insets(gfx::Insets()); | |
| 82 return border.Pass(); | |
| 83 } | |
| 84 | |
| 85 private: | |
| 86 DISALLOW_COPY_AND_ASSIGN(ChevronMenuButton); | |
| 87 }; | |
| 88 | |
| 89 } // namespace | 59 } // namespace |
| 90 | 60 |
| 91 // static | 61 // static |
| 92 bool BrowserActionsContainer::disable_animations_during_testing_ = false; | 62 bool BrowserActionsContainer::disable_animations_during_testing_ = false; |
| 93 | 63 |
| 94 //////////////////////////////////////////////////////////////////////////////// | 64 //////////////////////////////////////////////////////////////////////////////// |
| 95 // BrowserActionsContainer | 65 // BrowserActionsContainer |
| 96 | 66 |
| 97 BrowserActionsContainer::BrowserActionsContainer(Browser* browser, | 67 BrowserActionsContainer::BrowserActionsContainer(Browser* browser, |
| 98 View* owner_view) | 68 View* owner_view) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 120 extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews( | 90 extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews( |
| 121 browser->profile(), | 91 browser->profile(), |
| 122 owner_view->GetFocusManager(), | 92 owner_view->GetFocusManager(), |
| 123 extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS, | 93 extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS, |
| 124 this)); | 94 this)); |
| 125 | 95 |
| 126 resize_animation_.reset(new gfx::SlideAnimation(this)); | 96 resize_animation_.reset(new gfx::SlideAnimation(this)); |
| 127 resize_area_ = new views::ResizeArea(this); | 97 resize_area_ = new views::ResizeArea(this); |
| 128 AddChildView(resize_area_); | 98 AddChildView(resize_area_); |
| 129 | 99 |
| 130 chevron_ = new ChevronMenuButton(NULL, base::string16(), this, false); | 100 chevron_ = new views::MenuButton(NULL, base::string16(), this, false); |
| 101 chevron_->SetBorder(views::Border::NullBorder()); |
| 131 chevron_->EnableCanvasFlippingForRTLUI(true); | 102 chevron_->EnableCanvasFlippingForRTLUI(true); |
| 132 chevron_->SetAccessibleName( | 103 chevron_->SetAccessibleName( |
| 133 l10n_util::GetStringUTF16(IDS_ACCNAME_EXTENSIONS_CHEVRON)); | 104 l10n_util::GetStringUTF16(IDS_ACCNAME_EXTENSIONS_CHEVRON)); |
| 134 chevron_->SetVisible(false); | 105 chevron_->SetVisible(false); |
| 135 AddChildView(chevron_); | 106 AddChildView(chevron_); |
| 136 } | 107 } |
| 137 | 108 |
| 138 BrowserActionsContainer::~BrowserActionsContainer() { | 109 BrowserActionsContainer::~BrowserActionsContainer() { |
| 139 FOR_EACH_OBSERVER(BrowserActionsContainerObserver, | 110 FOR_EACH_OBSERVER(BrowserActionsContainerObserver, |
| 140 observers_, | 111 observers_, |
| (...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 // we delete and recreate everything here, but that's how it's done in | 775 // we delete and recreate everything here, but that's how it's done in |
| 805 // BrowserActionMoved(), too. If we want to optimize it, we could move the | 776 // BrowserActionMoved(), too. If we want to optimize it, we could move the |
| 806 // existing icons, instead of deleting it all. | 777 // existing icons, instead of deleting it all. |
| 807 DeleteBrowserActionViews(); | 778 DeleteBrowserActionViews(); |
| 808 CreateBrowserActionViews(); | 779 CreateBrowserActionViews(); |
| 809 SaveDesiredSizeAndAnimate(gfx::Tween::LINEAR, browser_action_views_.size()); | 780 SaveDesiredSizeAndAnimate(gfx::Tween::LINEAR, browser_action_views_.size()); |
| 810 } | 781 } |
| 811 | 782 |
| 812 void BrowserActionsContainer::LoadImages() { | 783 void BrowserActionsContainer::LoadImages() { |
| 813 ui::ThemeProvider* tp = GetThemeProvider(); | 784 ui::ThemeProvider* tp = GetThemeProvider(); |
| 814 chevron_->SetImage(views::Button::STATE_NORMAL, | 785 chevron_->SetIcon(*tp->GetImageSkiaNamed(IDR_BROWSER_ACTIONS_OVERFLOW)); |
| 815 *tp->GetImageSkiaNamed(IDR_BROWSER_ACTIONS_OVERFLOW)); | 786 chevron_->SetHoverIcon(*tp->GetImageSkiaNamed( |
| 787 IDR_BROWSER_ACTIONS_OVERFLOW_H)); |
| 788 chevron_->SetPushedIcon(*tp->GetImageSkiaNamed( |
| 789 IDR_BROWSER_ACTIONS_OVERFLOW_P)); |
| 816 | 790 |
| 817 const int kImages[] = IMAGE_GRID(IDR_DEVELOPER_MODE_HIGHLIGHT); | 791 const int kImages[] = IMAGE_GRID(IDR_DEVELOPER_MODE_HIGHLIGHT); |
| 818 highlight_painter_.reset(views::Painter::CreateImageGridPainter(kImages)); | 792 highlight_painter_.reset(views::Painter::CreateImageGridPainter(kImages)); |
| 819 } | 793 } |
| 820 | 794 |
| 821 void BrowserActionsContainer::SetContainerWidth() { | 795 void BrowserActionsContainer::SetContainerWidth() { |
| 822 int visible_actions = model_->GetVisibleIconCount(); | 796 int visible_actions = model_->GetVisibleIconCount(); |
| 823 if (visible_actions < 0) // All icons should be visible. | 797 if (visible_actions < 0) // All icons should be visible. |
| 824 visible_actions = model_->toolbar_items().size(); | 798 visible_actions = model_->toolbar_items().size(); |
| 825 chevron_->SetVisible( | 799 chevron_->SetVisible( |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 views::BubbleBorder::TOP_RIGHT, | 932 views::BubbleBorder::TOP_RIGHT, |
| 959 show_action); | 933 show_action); |
| 960 popup_->GetWidget()->AddObserver(this); | 934 popup_->GetWidget()->AddObserver(this); |
| 961 popup_button_ = button; | 935 popup_button_ = button; |
| 962 | 936 |
| 963 // Only set button as pushed if it was triggered by a user click. | 937 // Only set button as pushed if it was triggered by a user click. |
| 964 if (should_grant) | 938 if (should_grant) |
| 965 popup_button_->SetButtonPushed(); | 939 popup_button_->SetButtonPushed(); |
| 966 return true; | 940 return true; |
| 967 } | 941 } |
| OLD | NEW |