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

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

Issue 2720183002: [Views] Update ink drop for omnibox icons (Closed)
Patch Set: Removed CanProcessEventsWithinSubtree Created 3 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 (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/views/location_bar/location_icon_view.h" 5 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
6 6
7 #include "chrome/browser/ui/view_ids.h" 7 #include "chrome/browser/ui/view_ids.h"
8 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 8 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
9 #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h" 9 #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
10 #include "chrome/grit/generated_resources.h" 10 #include "chrome/grit/generated_resources.h"
11 #include "chrome/grit/theme_resources.h" 11 #include "chrome/grit/theme_resources.h"
12 #include "components/grit/components_scaled_resources.h" 12 #include "components/grit/components_scaled_resources.h"
13 #include "components/omnibox/browser/omnibox_edit_model.h" 13 #include "components/omnibox/browser/omnibox_edit_model.h"
14 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
15 #include "ui/accessibility/ax_node_data.h" 15 #include "ui/accessibility/ax_node_data.h"
16 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/views/controls/label.h" 17 #include "ui/views/controls/label.h"
18 18
19 using content::WebContents; 19 using content::WebContents;
20 20
21 LocationIconView::LocationIconView(const gfx::FontList& font_list, 21 LocationIconView::LocationIconView(const gfx::FontList& font_list,
22 LocationBarView* location_bar) 22 LocationBarView* location_bar)
23 : IconLabelBubbleView(font_list, true), 23 : IconLabelBubbleView(font_list, true),
24 suppress_mouse_released_action_(false),
25 location_bar_(location_bar), 24 location_bar_(location_bar),
26 animation_(this) { 25 animation_(this) {
27 set_id(VIEW_ID_LOCATION_ICON); 26 set_id(VIEW_ID_LOCATION_ICON);
27 SetInkDropMode(InkDropMode::ON);
28 28
29 #if defined(OS_MACOSX) 29 #if defined(OS_MACOSX)
30 SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); 30 SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
31 #else 31 #else
32 SetFocusBehavior(FocusBehavior::ALWAYS); 32 SetFocusBehavior(FocusBehavior::ALWAYS);
33 #endif 33 #endif
34 34
35 animation_.SetSlideDuration(kOpenTimeMS); 35 animation_.SetSlideDuration(kOpenTimeMS);
36 } 36 }
37 37
38 LocationIconView::~LocationIconView() { 38 LocationIconView::~LocationIconView() {
39 } 39 }
40 40
41 gfx::Size LocationIconView::GetMinimumSize() const { 41 gfx::Size LocationIconView::GetMinimumSize() const {
42 return GetMinimumSizeForPreferredSize(GetPreferredSize()); 42 return GetMinimumSizeForPreferredSize(GetPreferredSize());
43 } 43 }
44 44
45 bool LocationIconView::OnMousePressed(const ui::MouseEvent& event) { 45 bool LocationIconView::OnMousePressed(const ui::MouseEvent& event) {
46 if (event.IsOnlyMiddleMouseButton() && 46 if (event.IsOnlyMiddleMouseButton() &&
47 ui::Clipboard::IsSupportedClipboardType(ui::CLIPBOARD_TYPE_SELECTION)) { 47 ui::Clipboard::IsSupportedClipboardType(ui::CLIPBOARD_TYPE_SELECTION)) {
48 base::string16 text; 48 base::string16 text;
49 ui::Clipboard::GetForCurrentThread()->ReadText( 49 ui::Clipboard::GetForCurrentThread()->ReadText(
50 ui::CLIPBOARD_TYPE_SELECTION, &text); 50 ui::CLIPBOARD_TYPE_SELECTION, &text);
51 text = OmniboxView::SanitizeTextForPaste(text); 51 text = OmniboxView::SanitizeTextForPaste(text);
52 OmniboxEditModel* model = location_bar_->GetOmniboxView()->model(); 52 OmniboxEditModel* model = location_bar_->GetOmniboxView()->model();
53 if (model->CanPasteAndGo(text)) 53 if (model->CanPasteAndGo(text))
54 model->PasteAndGo(text); 54 model->PasteAndGo(text);
55 } 55 }
56 56
57 suppress_mouse_released_action_ = PageInfoBubbleView::GetShownBubbleType() != 57 IconLabelBubbleView::OnMousePressed(event);
58 PageInfoBubbleView::BUBBLE_NONE;
59 return true; 58 return true;
60 } 59 }
61 60
62 bool LocationIconView::OnMouseDragged(const ui::MouseEvent& event) { 61 bool LocationIconView::OnMouseDragged(const ui::MouseEvent& event) {
63 location_bar_->GetOmniboxView()->CloseOmniboxPopup(); 62 location_bar_->GetOmniboxView()->CloseOmniboxPopup();
64 return false; 63 return IconLabelBubbleView::OnMouseDragged(event);
65 }
66
67 void LocationIconView::OnMouseReleased(const ui::MouseEvent& event) {
68 if (event.IsOnlyMiddleMouseButton())
69 return;
70
71 // If this is the second click on this view then the bubble was showing on
72 // the mouse pressed event and is hidden now. Prevent the bubble from
73 // reshowing by doing nothing here.
74 if (suppress_mouse_released_action_) {
75 suppress_mouse_released_action_ = false;
76 return;
77 }
78
79 OnClickOrTap(event);
80 }
81
82 void LocationIconView::OnGestureEvent(ui::GestureEvent* event) {
83 if (event->type() != ui::ET_GESTURE_TAP)
84 return;
85 OnClickOrTap(*event);
86 event->SetHandled();
87 } 64 }
88 65
89 bool LocationIconView::GetTooltipText(const gfx::Point& p, 66 bool LocationIconView::GetTooltipText(const gfx::Point& p,
90 base::string16* tooltip) const { 67 base::string16* tooltip) const {
91 if (show_tooltip_) 68 if (show_tooltip_)
92 *tooltip = l10n_util::GetStringUTF16(IDS_TOOLTIP_LOCATION_ICON); 69 *tooltip = l10n_util::GetStringUTF16(IDS_TOOLTIP_LOCATION_ICON);
93 return show_tooltip_; 70 return show_tooltip_;
94 } 71 }
95 72
96 SkColor LocationIconView::GetTextColor() const { 73 SkColor LocationIconView::GetTextColor() const {
97 return location_bar_->GetColor(LocationBarView::SECURITY_CHIP_TEXT); 74 return location_bar_->GetColor(LocationBarView::SECURITY_CHIP_TEXT);
98 } 75 }
99 76
100 bool LocationIconView::OnActivate(const ui::Event& event) { 77 bool LocationIconView::ShowBubble(const ui::Event& event) {
101 WebContents* contents = location_bar_->GetWebContents(); 78 WebContents* contents = location_bar_->GetWebContents();
102 if (!contents) 79 if (!contents)
103 return false; 80 return false;
104 location_bar_->delegate()->ShowPageInfo(contents); 81 location_bar_->delegate()->ShowPageInfo(contents);
105 return true; 82 return true;
106 } 83 }
107 84
108 void LocationIconView::GetAccessibleNodeData(ui::AXNodeData* node_data) { 85 void LocationIconView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
109 IconLabelBubbleView::GetAccessibleNodeData(node_data); 86 IconLabelBubbleView::GetAccessibleNodeData(node_data);
110 node_data->role = ui::AX_ROLE_POP_UP_BUTTON; 87 node_data->role = ui::AX_ROLE_POP_UP_BUTTON;
111 } 88 }
112 89
90 bool LocationIconView::IsBubbleShowing() const {
91 return PageInfoBubbleView::GetShownBubbleType() !=
92 PageInfoBubbleView::BUBBLE_NONE;
93 }
94
113 gfx::Size LocationIconView::GetMinimumSizeForLabelText( 95 gfx::Size LocationIconView::GetMinimumSizeForLabelText(
114 const base::string16& text) const { 96 const base::string16& text) const {
115 views::Label label(text, {font_list()}); 97 views::Label label(text, {font_list()});
116 return GetMinimumSizeForPreferredSize( 98 return GetMinimumSizeForPreferredSize(
117 GetSizeForLabelWidth(label.GetPreferredSize().width())); 99 GetSizeForLabelWidth(label.GetPreferredSize().width()));
118 } 100 }
119 101
120 void LocationIconView::SetTextVisibility(bool should_show, 102 void LocationIconView::SetTextVisibility(bool should_show,
121 bool should_animate) { 103 bool should_animate) {
122 if (!should_animate) { 104 if (!should_animate) {
123 animation_.Reset(should_show); 105 animation_.Reset(should_show);
124 } else if (should_show) { 106 } else if (should_show) {
125 animation_.Show(); 107 animation_.Show();
126 } else { 108 } else {
127 animation_.Hide(); 109 animation_.Hide();
128 } 110 }
129 // The label text color may have changed. 111 // The label text color may have changed.
130 OnNativeThemeChanged(GetNativeTheme()); 112 OnNativeThemeChanged(GetNativeTheme());
131 } 113 }
132 114
115 bool LocationIconView::IsTriggerableEvent(const ui::Event& event) {
116 if (location_bar_->GetOmniboxView()->IsEditingOrEmpty())
117 return false;
118
119 if (event.IsMouseEvent()) {
120 if (event.AsMouseEvent()->IsOnlyMiddleMouseButton())
121 return false;
122 } else if (event.IsGestureEvent() && event.type() != ui::ET_GESTURE_TAP) {
123 return false;
124 }
125
126 return IconLabelBubbleView::IsTriggerableEvent(event);
127 }
128
133 double LocationIconView::WidthMultiplier() const { 129 double LocationIconView::WidthMultiplier() const {
134 return animation_.GetCurrentValue(); 130 return animation_.GetCurrentValue();
135 } 131 }
136 132
137 void LocationIconView::AnimationProgressed(const gfx::Animation*) { 133 void LocationIconView::AnimationProgressed(const gfx::Animation*) {
138 location_bar_->Layout(); 134 location_bar_->Layout();
139 location_bar_->SchedulePaint(); 135 location_bar_->SchedulePaint();
140 } 136 }
141 137
142 void LocationIconView::ProcessLocatedEvent(const ui::LocatedEvent& event) {
143 if (HitTestPoint(event.location()))
144 OnActivate(event);
145 }
146
147 gfx::Size LocationIconView::GetMinimumSizeForPreferredSize( 138 gfx::Size LocationIconView::GetMinimumSizeForPreferredSize(
148 gfx::Size size) const { 139 gfx::Size size) const {
149 const int kMinCharacters = 10; 140 const int kMinCharacters = 10;
150 size.SetToMin( 141 size.SetToMin(
151 GetSizeForLabelWidth(font_list().GetExpectedTextWidth(kMinCharacters))); 142 GetSizeForLabelWidth(font_list().GetExpectedTextWidth(kMinCharacters)));
152 return size; 143 return size;
153 } 144 }
154
155 void LocationIconView::OnClickOrTap(const ui::LocatedEvent& event) {
156 // Do not show page info if the user has been editing the location bar or the
157 // location bar is at the NTP.
158 if (location_bar_->GetOmniboxView()->IsEditingOrEmpty())
159 return;
160 ProcessLocatedEvent(event);
161 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/location_bar/location_icon_view.h ('k') | chrome/browser/ui/views/page_info/page_info_bubble_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698