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

Side by Side Diff: chrome/browser/ui/views/location_bar/bubble_icon_view.cc

Issue 2001843002: Use ink drop hover for focus states on toolbar buttons and location (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: layout Created 4 years, 7 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
OLDNEW
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/location_bar/bubble_icon_view.h" 5 #include "chrome/browser/ui/views/location_bar/bubble_icon_view.h"
6 6
7 #include "chrome/browser/command_updater.h" 7 #include "chrome/browser/command_updater.h"
8 #include "ui/accessibility/ax_view_state.h" 8 #include "ui/accessibility/ax_view_state.h"
9 #include "ui/base/material_design/material_design_controller.h" 9 #include "ui/base/material_design/material_design_controller.h"
10 #include "ui/events/event.h" 10 #include "ui/events/event.h"
11 #include "ui/gfx/color_palette.h" 11 #include "ui/gfx/color_palette.h"
12 #include "ui/gfx/color_utils.h" 12 #include "ui/gfx/color_utils.h"
13 #include "ui/gfx/paint_vector_icon.h" 13 #include "ui/gfx/paint_vector_icon.h"
14 #include "ui/native_theme/native_theme.h" 14 #include "ui/native_theme/native_theme.h"
15 #include "ui/views/animation/button_ink_drop_delegate.h" 15 #include "ui/views/animation/button_ink_drop_delegate.h"
16 #include "ui/views/animation/ink_drop_hover.h" 16 #include "ui/views/animation/ink_drop_hover.h"
17 #include "ui/views/bubble/bubble_dialog_delegate.h" 17 #include "ui/views/bubble/bubble_dialog_delegate.h"
18 18
19 BubbleIconView::BubbleIconView(CommandUpdater* command_updater, int command_id) 19 BubbleIconView::BubbleIconView(CommandUpdater* command_updater, int command_id)
20 : image_(new views::ImageView()), 20 : image_(new views::ImageView()),
21 command_updater_(command_updater), 21 command_updater_(command_updater),
22 command_id_(command_id), 22 command_id_(command_id),
23 active_(false), 23 active_(false),
24 suppress_mouse_released_action_(false), 24 suppress_mouse_released_action_(false) {
25 ink_drop_delegate_(new views::ButtonInkDropDelegate(this, this)) {
26 AddChildView(image_); 25 AddChildView(image_);
27 image_->set_interactive(false); 26 image_->set_interactive(false);
28 image_->EnableCanvasFlippingForRTLUI(true); 27 image_->EnableCanvasFlippingForRTLUI(true);
29 image_->SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); 28 if (ui::MaterialDesignController::IsModeMaterial())
29 SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
30 else
31 image_->SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
32
33 set_ink_drop_delegate(
34 base::WrapUnique(new views::ButtonInkDropDelegate(this, this)));
30 } 35 }
31 36
32 BubbleIconView::~BubbleIconView() {} 37 BubbleIconView::~BubbleIconView() {}
33 38
34 bool BubbleIconView::IsBubbleShowing() const { 39 bool BubbleIconView::IsBubbleShowing() const {
35 // If the bubble is being destroyed, it's considered showing though it may be 40 // If the bubble is being destroyed, it's considered showing though it may be
36 // already invisible currently. 41 // already invisible currently.
37 return GetBubble() != nullptr; 42 return GetBubble() != nullptr;
38 } 43 }
39 44
(...skipping 25 matching lines...) Expand all
65 70
66 void BubbleIconView::Layout() { 71 void BubbleIconView::Layout() {
67 View::Layout(); 72 View::Layout();
68 image_->SetBoundsRect(GetLocalBounds()); 73 image_->SetBoundsRect(GetLocalBounds());
69 } 74 }
70 75
71 bool BubbleIconView::OnMousePressed(const ui::MouseEvent& event) { 76 bool BubbleIconView::OnMousePressed(const ui::MouseEvent& event) {
72 // If the bubble is showing then don't reshow it when the mouse is released. 77 // If the bubble is showing then don't reshow it when the mouse is released.
73 suppress_mouse_released_action_ = IsBubbleShowing(); 78 suppress_mouse_released_action_ = IsBubbleShowing();
74 if (!suppress_mouse_released_action_ && event.IsOnlyLeftMouseButton()) 79 if (!suppress_mouse_released_action_ && event.IsOnlyLeftMouseButton())
75 ink_drop_delegate_->OnAction(views::InkDropState::ACTION_PENDING); 80 ink_drop_delegate()->OnAction(views::InkDropState::ACTION_PENDING);
76 81
77 // We want to show the bubble on mouse release; that is the standard behavior 82 // We want to show the bubble on mouse release; that is the standard behavior
78 // for buttons. 83 // for buttons.
79 return true; 84 return true;
80 } 85 }
81 86
82 void BubbleIconView::OnMouseReleased(const ui::MouseEvent& event) { 87 void BubbleIconView::OnMouseReleased(const ui::MouseEvent& event) {
83 // If this is the second click on this view then the bubble was showing on the 88 // If this is the second click on this view then the bubble was showing on the
84 // mouse pressed event and is hidden now. Prevent the bubble from reshowing by 89 // mouse pressed event and is hidden now. Prevent the bubble from reshowing by
85 // doing nothing here. 90 // doing nothing here.
86 if (suppress_mouse_released_action_) { 91 if (suppress_mouse_released_action_) {
87 suppress_mouse_released_action_ = false; 92 suppress_mouse_released_action_ = false;
88 OnPressed(false); 93 OnPressed(false);
89 return; 94 return;
90 } 95 }
91 if (!event.IsLeftMouseButton()) 96 if (!event.IsLeftMouseButton())
92 return; 97 return;
93 98
94 const bool activated = HitTestPoint(event.location()); 99 const bool activated = HitTestPoint(event.location());
95 ink_drop_delegate_->OnAction(activated ? views::InkDropState::ACTIVATED 100 ink_drop_delegate()->OnAction(activated ? views::InkDropState::ACTIVATED
96 : views::InkDropState::HIDDEN); 101 : views::InkDropState::HIDDEN);
97 if (activated) 102 if (activated)
98 ExecuteCommand(EXECUTE_SOURCE_MOUSE); 103 ExecuteCommand(EXECUTE_SOURCE_MOUSE);
99 OnPressed(activated); 104 OnPressed(activated);
100 } 105 }
101 106
102 bool BubbleIconView::OnKeyPressed(const ui::KeyEvent& event) { 107 bool BubbleIconView::OnKeyPressed(const ui::KeyEvent& event) {
103 if (event.key_code() != ui::VKEY_RETURN && event.key_code() != ui::VKEY_SPACE) 108 if (event.key_code() != ui::VKEY_RETURN && event.key_code() != ui::VKEY_SPACE)
104 return false; 109 return false;
105 110
106 ink_drop_delegate_->OnAction(views::InkDropState::ACTIVATED); 111 ink_drop_delegate()->OnAction(views::InkDropState::ACTIVATED);
107 // As with CustomButton, return activates on key down and space activates on 112 // As with CustomButton, return activates on key down and space activates on
108 // key up. 113 // key up.
109 if (event.key_code() == ui::VKEY_RETURN) 114 if (event.key_code() == ui::VKEY_RETURN)
110 ExecuteCommand(EXECUTE_SOURCE_KEYBOARD); 115 ExecuteCommand(EXECUTE_SOURCE_KEYBOARD);
111 return true; 116 return true;
112 } 117 }
113 118
114 bool BubbleIconView::OnKeyReleased(const ui::KeyEvent& event) { 119 bool BubbleIconView::OnKeyReleased(const ui::KeyEvent& event) {
115 if (event.key_code() != ui::VKEY_SPACE) 120 if (event.key_code() != ui::VKEY_SPACE)
116 return false; 121 return false;
(...skipping 20 matching lines...) Expand all
137 } 142 }
138 143
139 void BubbleIconView::RemoveInkDropLayer(ui::Layer* ink_drop_layer) { 144 void BubbleIconView::RemoveInkDropLayer(ui::Layer* ink_drop_layer) {
140 views::InkDropHostView::RemoveInkDropLayer(ink_drop_layer); 145 views::InkDropHostView::RemoveInkDropLayer(ink_drop_layer);
141 image_->SetPaintToLayer(false); 146 image_->SetPaintToLayer(false);
142 } 147 }
143 148
144 std::unique_ptr<views::InkDropHover> BubbleIconView::CreateInkDropHover() 149 std::unique_ptr<views::InkDropHover> BubbleIconView::CreateInkDropHover()
145 const { 150 const {
146 // BubbleIconView views don't show hover effect. 151 // BubbleIconView views don't show hover effect.
147 return nullptr; 152 return HasFocus() ? InkDropHostView::CreateInkDropHover() : nullptr;
148 } 153 }
149 154
150 SkColor BubbleIconView::GetInkDropBaseColor() const { 155 SkColor BubbleIconView::GetInkDropBaseColor() const {
151 return color_utils::DeriveDefaultIconColor(GetNativeTheme()->GetSystemColor( 156 return color_utils::DeriveDefaultIconColor(GetNativeTheme()->GetSystemColor(
152 ui::NativeTheme::kColorId_TextfieldDefaultColor)); 157 ui::NativeTheme::kColorId_TextfieldDefaultColor));
153 } 158 }
154 159
160 bool BubbleIconView::ShouldShowInkDropForFocus() const {
161 return true;
162 }
163
155 void BubbleIconView::OnGestureEvent(ui::GestureEvent* event) { 164 void BubbleIconView::OnGestureEvent(ui::GestureEvent* event) {
156 if (event->type() == ui::ET_GESTURE_TAP) { 165 if (event->type() == ui::ET_GESTURE_TAP) {
157 ink_drop_delegate_->OnAction(views::InkDropState::ACTIVATED); 166 ink_drop_delegate()->OnAction(views::InkDropState::ACTIVATED);
158 ExecuteCommand(EXECUTE_SOURCE_GESTURE); 167 ExecuteCommand(EXECUTE_SOURCE_GESTURE);
159 event->SetHandled(); 168 event->SetHandled();
160 } 169 }
161 } 170 }
162 171
163 void BubbleIconView::OnWidgetDestroying(views::Widget* widget) { 172 void BubbleIconView::OnWidgetDestroying(views::Widget* widget) {
164 widget->RemoveObserver(this); 173 widget->RemoveObserver(this);
165 } 174 }
166 175
167 void BubbleIconView::OnWidgetVisibilityChanged(views::Widget* widget, 176 void BubbleIconView::OnWidgetVisibilityChanged(views::Widget* widget,
168 bool visible) { 177 bool visible) {
169 // |widget| is a bubble that has just got shown / hidden. 178 // |widget| is a bubble that has just got shown / hidden.
170 if (!visible) 179 if (!visible)
171 ink_drop_delegate_->OnAction(views::InkDropState::DEACTIVATED); 180 ink_drop_delegate()->OnAction(views::InkDropState::DEACTIVATED);
172 } 181 }
173 182
174 void BubbleIconView::ExecuteCommand(ExecuteSource source) { 183 void BubbleIconView::ExecuteCommand(ExecuteSource source) {
175 OnExecuting(source); 184 OnExecuting(source);
176 if (command_updater_) 185 if (command_updater_)
177 command_updater_->ExecuteCommand(command_id_); 186 command_updater_->ExecuteCommand(command_id_);
178 } 187 }
179 188
180 gfx::VectorIconId BubbleIconView::GetVectorIcon() const { 189 gfx::VectorIconId BubbleIconView::GetVectorIcon() const {
181 return gfx::VectorIconId::VECTOR_ICON_NONE; 190 return gfx::VectorIconId::VECTOR_ICON_NONE;
(...skipping 23 matching lines...) Expand all
205 image_->SetImage( 214 image_->SetImage(
206 gfx::CreateVectorIcon(GetVectorIcon(), icon_size, icon_color)); 215 gfx::CreateVectorIcon(GetVectorIcon(), icon_size, icon_color));
207 } 216 }
208 217
209 void BubbleIconView::SetActiveInternal(bool active) { 218 void BubbleIconView::SetActiveInternal(bool active) {
210 if (active_ == active) 219 if (active_ == active)
211 return; 220 return;
212 active_ = active; 221 active_ = active;
213 UpdateIcon(); 222 UpdateIcon();
214 } 223 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/location_bar/bubble_icon_view.h ('k') | chrome/browser/ui/views/toolbar/app_menu_button.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698