OLD | NEW |
---|---|
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/find_bar_view.h" | 5 #include "chrome/browser/ui/views/find_bar_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
13 #include "chrome/browser/themes/theme_properties.h" | 13 #include "chrome/browser/themes/theme_properties.h" |
14 #include "chrome/browser/ui/find_bar/find_bar_controller.h" | 14 #include "chrome/browser/ui/find_bar/find_bar_controller.h" |
15 #include "chrome/browser/ui/find_bar/find_bar_state.h" | 15 #include "chrome/browser/ui/find_bar/find_bar_state.h" |
16 #include "chrome/browser/ui/find_bar/find_bar_state_factory.h" | 16 #include "chrome/browser/ui/find_bar/find_bar_state_factory.h" |
17 #include "chrome/browser/ui/find_bar/find_notification_details.h" | 17 #include "chrome/browser/ui/find_bar/find_notification_details.h" |
18 #include "chrome/browser/ui/find_bar/find_tab_helper.h" | 18 #include "chrome/browser/ui/find_bar/find_tab_helper.h" |
19 #include "chrome/browser/ui/view_ids.h" | 19 #include "chrome/browser/ui/view_ids.h" |
20 #include "chrome/browser/ui/views/find_bar_host.h" | 20 #include "chrome/browser/ui/views/find_bar_host.h" |
21 #include "chrome/browser/ui/views/frame/browser_view.h" | 21 #include "chrome/browser/ui/views/frame/browser_view.h" |
22 #include "chrome/grit/generated_resources.h" | 22 #include "chrome/grit/generated_resources.h" |
23 #include "grit/theme_resources.h" | 23 #include "grit/theme_resources.h" |
24 #include "third_party/skia/include/core/SkPaint.h" | 24 #include "third_party/skia/include/core/SkPaint.h" |
25 #include "ui/base/ime/input_method.h" | 25 #include "ui/base/ime/input_method.h" |
26 #include "ui/base/ime/text_input_flags.h" | 26 #include "ui/base/ime/text_input_flags.h" |
27 #include "ui/base/l10n/l10n_util.h" | 27 #include "ui/base/l10n/l10n_util.h" |
28 #include "ui/base/resource/material_design/material_design_controller.h" | |
28 #include "ui/base/resource/resource_bundle.h" | 29 #include "ui/base/resource/resource_bundle.h" |
29 #include "ui/base/theme_provider.h" | 30 #include "ui/base/theme_provider.h" |
30 #include "ui/events/event.h" | 31 #include "ui/events/event.h" |
31 #include "ui/gfx/canvas.h" | 32 #include "ui/gfx/canvas.h" |
33 #include "ui/gfx/paint_vector_icon.h" | |
34 #include "ui/gfx/vector_icons_public2.h" | |
35 #include "ui/native_theme/common_theme.h" | |
36 #include "ui/native_theme/native_theme.h" | |
32 #include "ui/resources/grit/ui_resources.h" | 37 #include "ui/resources/grit/ui_resources.h" |
38 #include "ui/views/background.h" | |
33 #include "ui/views/border.h" | 39 #include "ui/views/border.h" |
40 #include "ui/views/bubble/bubble_border.h" | |
34 #include "ui/views/controls/button/image_button.h" | 41 #include "ui/views/controls/button/image_button.h" |
35 #include "ui/views/controls/label.h" | 42 #include "ui/views/controls/label.h" |
43 #include "ui/views/controls/separator.h" | |
44 #include "ui/views/layout/box_layout.h" | |
36 #include "ui/views/painter.h" | 45 #include "ui/views/painter.h" |
37 #include "ui/views/widget/widget.h" | 46 #include "ui/views/widget/widget.h" |
38 | 47 |
39 namespace { | 48 namespace { |
40 | 49 |
41 // The margins around the UI controls, derived from assets and design specs. | 50 // The margins around the UI controls, derived from assets and design specs. |
42 const int kMarginLeftOfCloseButton = 3; | 51 const int kMarginLeftOfCloseButton = 3; |
43 const int kMarginRightOfCloseButton = 7; | 52 const int kMarginRightOfCloseButton = 7; |
44 const int kMarginLeftOfMatchCountLabel = 3; | 53 const int kMarginLeftOfMatchCountLabel = 3; |
45 const int kMarginRightOfMatchCountLabel = 1; | 54 const int kMarginRightOfMatchCountLabel = 1; |
(...skipping 16 matching lines...) Expand all Loading... | |
62 // The background color of the match count label when results are found. | 71 // The background color of the match count label when results are found. |
63 const SkColor kBackgroundColorMatch = SkColorSetARGB(0, 255, 255, 255); | 72 const SkColor kBackgroundColorMatch = SkColorSetARGB(0, 255, 255, 255); |
64 | 73 |
65 // The background color of the match count label when no results are found. | 74 // The background color of the match count label when no results are found. |
66 const SkColor kBackgroundColorNoMatch = SkColorSetRGB(255, 102, 102); | 75 const SkColor kBackgroundColorNoMatch = SkColorSetRGB(255, 102, 102); |
67 | 76 |
68 // The default number of average characters that the text box will be. This | 77 // The default number of average characters that the text box will be. This |
69 // number brings the width on a "regular fonts" system to about 300px. | 78 // number brings the width on a "regular fonts" system to about 300px. |
70 const int kDefaultCharWidth = 43; | 79 const int kDefaultCharWidth = 43; |
71 | 80 |
81 // Creates a label that mouse click focus to a given target. | |
sky
2015/08/05 00:06:01
This comment is missing a few words, and I was con
Evan Stade
2015/08/05 19:04:25
Done.
| |
82 class MatchCountLabel : public views::Label { | |
sky
2015/08/05 00:06:01
Rather than this, and FocusForwarderView, could we
Evan Stade
2015/08/05 19:04:25
that sounds more difficult because
a) we'd probabl
| |
83 public: | |
84 explicit MatchCountLabel(views::View* target_view) | |
85 : target_view_(target_view) { | |
86 DCHECK(target_view); | |
87 } | |
88 | |
89 // views::Label overrides: | |
90 bool OnMousePressed(const ui::MouseEvent& event) override { | |
91 target_view_->RequestFocus(); | |
92 return true; | |
93 } | |
94 | |
95 private: | |
96 views::View* target_view_; | |
97 | |
98 DISALLOW_COPY_AND_ASSIGN(MatchCountLabel); | |
99 }; | |
100 | |
72 } // namespace | 101 } // namespace |
73 | 102 |
74 //////////////////////////////////////////////////////////////////////////////// | 103 //////////////////////////////////////////////////////////////////////////////// |
75 // FindBarView, public: | 104 // FindBarView, public: |
76 | 105 |
77 FindBarView::FindBarView(FindBarHost* host) | 106 FindBarView::FindBarView(FindBarHost* host) |
78 : DropdownBarView(host), | 107 : DropdownBarView(host), |
79 find_text_(NULL), | 108 find_text_(NULL), |
80 match_count_text_(NULL), | 109 match_count_text_(NULL), |
81 focus_forwarder_view_(NULL), | 110 focus_forwarder_view_(NULL), |
82 find_previous_button_(NULL), | 111 find_previous_button_(NULL), |
83 find_next_button_(NULL), | 112 find_next_button_(NULL), |
84 close_button_(NULL) { | 113 close_button_(NULL) { |
85 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
86 | |
87 find_text_ = new views::Textfield; | 114 find_text_ = new views::Textfield; |
88 find_text_->set_id(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); | 115 find_text_->set_id(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); |
89 find_text_->set_default_width_in_chars(kDefaultCharWidth); | 116 find_text_->set_default_width_in_chars(kDefaultCharWidth); |
90 find_text_->set_controller(this); | 117 find_text_->set_controller(this); |
91 find_text_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FIND)); | 118 find_text_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FIND)); |
92 find_text_->SetTextInputFlags(ui::TEXT_INPUT_FLAG_AUTOCORRECT_OFF); | 119 find_text_->SetTextInputFlags(ui::TEXT_INPUT_FLAG_AUTOCORRECT_OFF); |
93 // The find bar textfield has a background image instead of a border. | |
94 find_text_->SetBorder(views::Border::NullBorder()); | |
95 AddChildView(find_text_); | 120 AddChildView(find_text_); |
96 | 121 |
97 match_count_text_ = new views::Label(); | |
98 AddChildView(match_count_text_); | |
99 | |
100 // Create a focus forwarder view which sends focus to find_text_. | |
101 focus_forwarder_view_ = new FocusForwarderView(find_text_); | |
102 AddChildView(focus_forwarder_view_); | |
103 | |
104 find_previous_button_ = new views::ImageButton(this); | 122 find_previous_button_ = new views::ImageButton(this); |
105 find_previous_button_->set_tag(FIND_PREVIOUS_TAG); | 123 find_previous_button_->set_tag(FIND_PREVIOUS_TAG); |
106 find_previous_button_->SetFocusable(true); | 124 find_previous_button_->SetFocusable(true); |
107 find_previous_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
108 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV)); | |
109 find_previous_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
110 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_H)); | |
111 find_previous_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
112 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_P)); | |
113 find_previous_button_->SetImage(views::CustomButton::STATE_DISABLED, | |
114 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_D)); | |
115 find_previous_button_->SetTooltipText( | 125 find_previous_button_->SetTooltipText( |
116 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP)); | 126 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP)); |
117 find_previous_button_->SetAccessibleName( | 127 find_previous_button_->SetAccessibleName( |
118 l10n_util::GetStringUTF16(IDS_ACCNAME_PREVIOUS)); | 128 l10n_util::GetStringUTF16(IDS_ACCNAME_PREVIOUS)); |
119 AddChildView(find_previous_button_); | 129 AddChildView(find_previous_button_); |
120 | 130 |
121 find_next_button_ = new views::ImageButton(this); | 131 find_next_button_ = new views::ImageButton(this); |
122 find_next_button_->set_tag(FIND_NEXT_TAG); | 132 find_next_button_->set_tag(FIND_NEXT_TAG); |
123 find_next_button_->SetFocusable(true); | 133 find_next_button_->SetFocusable(true); |
124 find_next_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
125 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT)); | |
126 find_next_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
127 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_H)); | |
128 find_next_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
129 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_P)); | |
130 find_next_button_->SetImage(views::CustomButton::STATE_DISABLED, | |
131 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_D)); | |
132 find_next_button_->SetTooltipText( | 134 find_next_button_->SetTooltipText( |
133 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_NEXT_TOOLTIP)); | 135 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_NEXT_TOOLTIP)); |
134 find_next_button_->SetAccessibleName( | 136 find_next_button_->SetAccessibleName( |
135 l10n_util::GetStringUTF16(IDS_ACCNAME_NEXT)); | 137 l10n_util::GetStringUTF16(IDS_ACCNAME_NEXT)); |
136 AddChildView(find_next_button_); | 138 AddChildView(find_next_button_); |
137 | 139 |
138 close_button_ = new views::ImageButton(this); | 140 close_button_ = new views::ImageButton(this); |
139 close_button_->set_tag(CLOSE_TAG); | 141 close_button_->set_tag(CLOSE_TAG); |
140 close_button_->SetFocusable(true); | 142 close_button_->SetFocusable(true); |
141 close_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
142 rb.GetImageSkiaNamed(IDR_CLOSE_1)); | |
143 close_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
144 rb.GetImageSkiaNamed(IDR_CLOSE_1_H)); | |
145 close_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
146 rb.GetImageSkiaNamed(IDR_CLOSE_1_P)); | |
147 close_button_->SetTooltipText( | 143 close_button_->SetTooltipText( |
148 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_CLOSE_TOOLTIP)); | 144 l10n_util::GetStringUTF16(IDS_FIND_IN_PAGE_CLOSE_TOOLTIP)); |
149 close_button_->SetAccessibleName( | 145 close_button_->SetAccessibleName( |
150 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); | 146 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); |
151 close_button_->SetAnimationDuration(0); | 147 close_button_->SetAnimationDuration(0); |
152 AddChildView(close_button_); | 148 AddChildView(close_button_); |
153 | 149 |
154 SetBackground(rb.GetImageSkiaNamed(IDR_FIND_DLG_LEFT_BACKGROUND), | 150 EnableCanvasFlippingForRTLUI(true); |
155 rb.GetImageSkiaNamed(IDR_FIND_DLG_RIGHT_BACKGROUND)); | |
156 | 151 |
157 SetBorderFromIds( | 152 if (ui::MaterialDesignController::IsModeMaterial()) |
158 IDR_FIND_DIALOG_LEFT, IDR_FIND_DIALOG_MIDDLE, IDR_FIND_DIALOG_RIGHT); | 153 InitViewsForMaterial(); |
159 | 154 else |
160 preferred_height_ = rb.GetImageSkiaNamed(IDR_FIND_DIALOG_MIDDLE)->height(); | 155 InitViewsForNonMaterial(); |
161 | |
162 static const int kImages[] = IMAGE_GRID(IDR_TEXTFIELD); | |
163 find_text_border_.reset(views::Painter::CreateImageGridPainter(kImages)); | |
164 | |
165 EnableCanvasFlippingForRTLUI(true); | |
166 } | 156 } |
167 | 157 |
168 FindBarView::~FindBarView() { | 158 FindBarView::~FindBarView() { |
169 } | 159 } |
170 | 160 |
171 void FindBarView::SetFindTextAndSelectedRange( | 161 void FindBarView::SetFindTextAndSelectedRange( |
172 const base::string16& find_text, | 162 const base::string16& find_text, |
173 const gfx::Range& selected_range) { | 163 const gfx::Range& selected_range) { |
174 find_text_->SetText(find_text); | 164 find_text_->SetText(find_text); |
175 find_text_->SelectRange(selected_range); | 165 find_text_->SelectRange(selected_range); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
236 find_text_->RequestFocus(); | 226 find_text_->RequestFocus(); |
237 GetWidget()->GetInputMethod()->ShowImeIfNeeded(); | 227 GetWidget()->GetInputMethod()->ShowImeIfNeeded(); |
238 if (select_all && !find_text_->text().empty()) | 228 if (select_all && !find_text_->text().empty()) |
239 find_text_->SelectAll(true); | 229 find_text_->SelectAll(true); |
240 } | 230 } |
241 | 231 |
242 /////////////////////////////////////////////////////////////////////////////// | 232 /////////////////////////////////////////////////////////////////////////////// |
243 // FindBarView, views::View overrides: | 233 // FindBarView, views::View overrides: |
244 | 234 |
245 void FindBarView::OnPaint(gfx::Canvas* canvas) { | 235 void FindBarView::OnPaint(gfx::Canvas* canvas) { |
236 if (ui::MaterialDesignController::IsModeMaterial()) | |
237 return views::View::OnPaint(canvas); | |
238 | |
246 // Paint drop down bar border and background. | 239 // Paint drop down bar border and background. |
247 DropdownBarView::OnPaint(canvas); | 240 DropdownBarView::OnPaint(canvas); |
248 | 241 |
249 // Paint the background and border for the textfield. | 242 // Paint the background and border for the textfield. |
250 const int find_text_x = kMarginLeftOfFindTextfield / 2; | 243 const int find_text_x = kMarginLeftOfFindTextfield / 2; |
251 const gfx::Rect text_bounds(find_text_x, find_next_button_->y(), | 244 const gfx::Rect text_bounds(find_text_x, find_next_button_->y(), |
252 find_next_button_->bounds().right() - find_text_x, | 245 find_next_button_->bounds().right() - find_text_x, |
253 find_next_button_->height()); | 246 find_next_button_->height()); |
254 const int kBorderCornerRadius = 2; | 247 const int kBorderCornerRadius = 2; |
255 gfx::Rect background_bounds = text_bounds; | 248 gfx::Rect background_bounds = text_bounds; |
(...skipping 15 matching lines...) Expand all Loading... | |
271 // subtract 3 for top and 3 for bottom. | 264 // subtract 3 for top and 3 for bottom. |
272 gfx::Rect match_count_background_bounds(match_count_text_->bounds()); | 265 gfx::Rect match_count_background_bounds(match_count_text_->bounds()); |
273 match_count_background_bounds.set_height( | 266 match_count_background_bounds.set_height( |
274 find_previous_button_->height() - 6); // Subtract 3px x 2. | 267 find_previous_button_->height() - 6); // Subtract 3px x 2. |
275 match_count_background_bounds.set_y( | 268 match_count_background_bounds.set_y( |
276 (height() - match_count_background_bounds.height()) / 2); | 269 (height() - match_count_background_bounds.height()) / 2); |
277 canvas->FillRect(match_count_background_bounds, | 270 canvas->FillRect(match_count_background_bounds, |
278 match_count_text_->background_color()); | 271 match_count_text_->background_color()); |
279 } | 272 } |
280 | 273 |
274 void FindBarView::OnPaintBackground(gfx::Canvas* canvas) { | |
275 if (!ui::MaterialDesignController::IsModeMaterial()) | |
276 return views::View::OnPaintBackground(canvas); | |
277 | |
278 // Draw within the lines. | |
279 canvas->Save(); | |
280 gfx::Rect bounds = GetLocalBounds(); | |
281 bounds.Inset(border()->GetInsets()); | |
282 canvas->ClipRect(bounds); | |
283 views::View::OnPaintBackground(canvas); | |
284 canvas->Restore(); | |
285 } | |
286 | |
281 void FindBarView::Layout() { | 287 void FindBarView::Layout() { |
288 if (ui::MaterialDesignController::IsModeMaterial()) | |
289 return views::View::Layout(); | |
290 | |
282 int panel_width = GetPreferredSize().width(); | 291 int panel_width = GetPreferredSize().width(); |
283 | 292 |
284 // Stay within view bounds. | 293 // Stay within view bounds. |
285 int view_width = width(); | 294 int view_width = width(); |
286 if (view_width && view_width < panel_width) | 295 if (view_width && view_width < panel_width) |
287 panel_width = view_width; | 296 panel_width = view_width; |
288 | 297 |
289 // First we draw the close button on the far right. | 298 // First we draw the close button on the far right. |
290 gfx::Size sz = close_button_->GetPreferredSize(); | 299 gfx::Size sz = close_button_->GetPreferredSize(); |
291 close_button_->SetBounds(panel_width - sz.width() - | 300 close_button_->SetBounds(panel_width - sz.width() - |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 // between the find text box and the find button so that when the user clicks | 349 // between the find text box and the find button so that when the user clicks |
341 // in that area we focus on the find text box. | 350 // in that area we focus on the find text box. |
342 const int find_text_edge = find_text_->x() + find_text_->width(); | 351 const int find_text_edge = find_text_->x() + find_text_->width(); |
343 focus_forwarder_view_->SetBounds( | 352 focus_forwarder_view_->SetBounds( |
344 find_text_edge, find_previous_button_->y(), | 353 find_text_edge, find_previous_button_->y(), |
345 find_previous_button_->x() - find_text_edge, | 354 find_previous_button_->x() - find_text_edge, |
346 find_previous_button_->height()); | 355 find_previous_button_->height()); |
347 } | 356 } |
348 | 357 |
349 gfx::Size FindBarView::GetPreferredSize() const { | 358 gfx::Size FindBarView::GetPreferredSize() const { |
359 if (ui::MaterialDesignController::IsModeMaterial()) { | |
360 gfx::Size size = views::View::GetPreferredSize(); | |
361 size.set_width(find_text_->GetPreferredSize().width()); | |
sky
2015/08/05 00:06:01
It's worth a comment as to why the preferred size
Evan Stade
2015/08/05 19:04:25
Done.
| |
362 return size; | |
363 } | |
364 | |
350 gfx::Size prefsize = find_text_->GetPreferredSize(); | 365 gfx::Size prefsize = find_text_->GetPreferredSize(); |
351 prefsize.set_height(preferred_height_); | 366 prefsize.set_height(preferred_height_); |
352 | 367 |
353 // Add up all the preferred sizes and margins of the rest of the controls. | 368 // Add up all the preferred sizes and margins of the rest of the controls. |
354 prefsize.Enlarge(kMarginLeftOfCloseButton + kMarginRightOfCloseButton + | 369 prefsize.Enlarge(kMarginLeftOfCloseButton + kMarginRightOfCloseButton + |
355 kMarginLeftOfFindTextfield - | 370 kMarginLeftOfFindTextfield - |
356 find_text_->GetInsets().width(), | 371 find_text_->GetInsets().width(), |
357 0); | 372 0); |
358 prefsize.Enlarge(find_previous_button_->GetPreferredSize().width(), 0); | 373 prefsize.Enlarge(find_previous_button_->GetPreferredSize().width(), 0); |
359 prefsize.Enlarge(find_next_button_->GetPreferredSize().width(), 0); | 374 prefsize.Enlarge(find_next_button_->GetPreferredSize().width(), 0); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
433 Find(sender->text()); | 448 Find(sender->text()); |
434 } | 449 } |
435 | 450 |
436 void FindBarView::OnAfterPaste() { | 451 void FindBarView::OnAfterPaste() { |
437 // Clear the last search text so we always search for the user input after | 452 // Clear the last search text so we always search for the user input after |
438 // a paste operation, even if the pasted text is the same as before. | 453 // a paste operation, even if the pasted text is the same as before. |
439 // See http://crbug.com/79002 | 454 // See http://crbug.com/79002 |
440 last_searched_text_.clear(); | 455 last_searched_text_.clear(); |
441 } | 456 } |
442 | 457 |
458 void FindBarView::InitViewsForNonMaterial() { | |
459 match_count_text_ = new views::Label(); | |
460 AddChildView(match_count_text_); | |
461 | |
462 // Create a focus forwarder view which sends focus to find_text_. | |
463 focus_forwarder_view_ = new FocusForwarderView(find_text_); | |
464 AddChildView(focus_forwarder_view_); | |
465 | |
466 // The find bar textfield has a background image instead of a border. | |
467 find_text_->SetBorder(views::Border::NullBorder()); | |
468 | |
469 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
470 find_previous_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
471 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV)); | |
472 find_previous_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
473 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_H)); | |
474 find_previous_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
475 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_P)); | |
476 find_previous_button_->SetImage(views::CustomButton::STATE_DISABLED, | |
477 rb.GetImageSkiaNamed(IDR_FINDINPAGE_PREV_D)); | |
478 | |
479 find_next_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
480 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT)); | |
481 find_next_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
482 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_H)); | |
483 find_next_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
484 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_P)); | |
485 find_next_button_->SetImage(views::CustomButton::STATE_DISABLED, | |
486 rb.GetImageSkiaNamed(IDR_FINDINPAGE_NEXT_D)); | |
487 | |
488 close_button_->SetImage(views::CustomButton::STATE_NORMAL, | |
489 rb.GetImageSkiaNamed(IDR_CLOSE_1)); | |
490 close_button_->SetImage(views::CustomButton::STATE_HOVERED, | |
491 rb.GetImageSkiaNamed(IDR_CLOSE_1_H)); | |
492 close_button_->SetImage(views::CustomButton::STATE_PRESSED, | |
493 rb.GetImageSkiaNamed(IDR_CLOSE_1_P)); | |
494 | |
495 SetBackground(rb.GetImageSkiaNamed(IDR_FIND_DLG_LEFT_BACKGROUND), | |
496 rb.GetImageSkiaNamed(IDR_FIND_DLG_RIGHT_BACKGROUND)); | |
497 SetBorderFromIds(IDR_FIND_DIALOG_LEFT, IDR_FIND_DIALOG_MIDDLE, | |
498 IDR_FIND_DIALOG_RIGHT); | |
499 | |
500 preferred_height_ = rb.GetImageSkiaNamed(IDR_FIND_DIALOG_MIDDLE)->height(); | |
501 | |
502 static const int kImages[] = IMAGE_GRID(IDR_TEXTFIELD); | |
503 find_text_border_.reset(views::Painter::CreateImageGridPainter(kImages)); | |
504 } | |
505 | |
506 void FindBarView::InitViewsForMaterial() { | |
507 // The background color is not used since there's no arrow. | |
508 // TODO(estade): this shadow is not quite the same as in the mocks. | |
509 SetBorder(make_scoped_ptr(new views::BubbleBorder( | |
510 views::BubbleBorder::NONE, views::BubbleBorder::SMALL_SHADOW, | |
511 SK_ColorGREEN))); | |
512 | |
513 match_count_text_ = new MatchCountLabel(find_text_); | |
514 AddChildViewAt(match_count_text_, 1); | |
515 | |
516 views::Separator* separator = | |
517 new views::Separator(views::Separator::VERTICAL); | |
518 // TODO(estade): refine these constants. | |
519 separator->SetColor(SkColorSetRGB(0xD5, 0xD5, 0xD5)); | |
520 separator->SetBorder(views::Border::CreateEmptyBorder(4, 10, 4, 10)); | |
521 AddChildViewAt(separator, 2); | |
522 | |
523 find_text_->SetBorder(views::Border::NullBorder()); | |
524 // Reserve horizontal space. Note that |find_text_| will only be allotted | |
525 // what space remains after other elements have been laid out, but this | |
526 // setting is still used when calculating the overall find bar's width. | |
527 find_text_->set_default_width_in_chars(30); | |
528 | |
529 struct { | |
530 views::ImageButton* button; | |
531 gfx::VectorIconId id; | |
532 } button_images[] = { | |
533 {find_previous_button_, gfx::VectorIconId::FIND_PREV}, | |
534 {find_next_button_, gfx::VectorIconId::FIND_NEXT}, | |
535 {close_button_, gfx::VectorIconId::FIND_CLOSE}, | |
536 }; | |
537 | |
538 SkColor grey; | |
539 ui::CommonThemeGetSystemColor(ui::NativeTheme::kColorId_ChromeIconGrey, | |
540 &grey); | |
541 SkColor blue; | |
542 ui::CommonThemeGetSystemColor(ui::NativeTheme::kColorId_GoogleBlue, &blue); | |
543 for (size_t i = 0; i < arraysize(button_images); ++i) { | |
544 views::ImageButton* button = button_images[i].button; | |
545 button->SetImageAlignment(views::ImageButton::ALIGN_CENTER, | |
546 views::ImageButton::ALIGN_MIDDLE); | |
547 | |
548 gfx::ImageSkia image = gfx::CreateVectorIcon(button_images[i].id, 16, grey); | |
549 button->SetImage(views::CustomButton::STATE_NORMAL, &image); | |
550 image = gfx::CreateVectorIcon(button_images[i].id, 16, blue); | |
551 button->SetImage(views::CustomButton::STATE_PRESSED, &image); | |
552 // TODO(estade): I don't think the buttons are ever disabled, so this image | |
553 // is never visible. Consider removing this image or setting the buttons to | |
554 // disabled at sensible times. | |
555 image = gfx::CreateVectorIcon(button_images[i].id, 16, | |
556 SkColorSetA(grey, 0xff / 2)); | |
557 button->SetImage(views::CustomButton::STATE_DISABLED, &image); | |
558 } | |
559 | |
560 views::BoxLayout* manager = | |
561 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); | |
562 SetLayoutManager(manager); | |
563 manager->SetFlexForView(find_text_, 1); | |
564 } | |
565 | |
443 void FindBarView::Find(const base::string16& search_text) { | 566 void FindBarView::Find(const base::string16& search_text) { |
444 FindBarController* controller = find_bar_host()->GetFindBarController(); | 567 FindBarController* controller = find_bar_host()->GetFindBarController(); |
445 DCHECK(controller); | 568 DCHECK(controller); |
446 content::WebContents* web_contents = controller->web_contents(); | 569 content::WebContents* web_contents = controller->web_contents(); |
447 // We must guard against a NULL web_contents, which can happen if the text | 570 // We must guard against a NULL web_contents, which can happen if the text |
448 // in the Find box is changed right after the tab is destroyed. Otherwise, it | 571 // in the Find box is changed right after the tab is destroyed. Otherwise, it |
449 // can lead to crashes, as exposed by automation testing in issue 8048. | 572 // can lead to crashes, as exposed by automation testing in issue 8048. |
450 if (!web_contents) | 573 if (!web_contents) |
451 return; | 574 return; |
452 FindTabHelper* find_tab_helper = FindTabHelper::FromWebContents(web_contents); | 575 FindTabHelper* find_tab_helper = FindTabHelper::FromWebContents(web_contents); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
495 | 618 |
496 FindBarHost* FindBarView::find_bar_host() const { | 619 FindBarHost* FindBarView::find_bar_host() const { |
497 return static_cast<FindBarHost*>(host()); | 620 return static_cast<FindBarHost*>(host()); |
498 } | 621 } |
499 | 622 |
500 const char* FindBarView::GetClassName() const { | 623 const char* FindBarView::GetClassName() const { |
501 return "FindBarView"; | 624 return "FindBarView"; |
502 } | 625 } |
503 | 626 |
504 void FindBarView::OnThemeChanged() { | 627 void FindBarView::OnThemeChanged() { |
628 if (ui::MaterialDesignController::IsModeMaterial()) | |
629 return; | |
630 | |
505 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 631 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
506 if (GetThemeProvider()) { | 632 if (GetThemeProvider()) { |
507 close_button_->SetBackground( | 633 close_button_->SetBackground( |
508 GetThemeProvider()->GetColor(ThemeProperties::COLOR_TAB_TEXT), | 634 GetThemeProvider()->GetColor(ThemeProperties::COLOR_TAB_TEXT), |
509 rb.GetImageSkiaNamed(IDR_CLOSE_1), | 635 rb.GetImageSkiaNamed(IDR_CLOSE_1), |
510 rb.GetImageSkiaNamed(IDR_CLOSE_1_MASK)); | 636 rb.GetImageSkiaNamed(IDR_CLOSE_1_MASK)); |
511 } | 637 } |
512 } | 638 } |
639 | |
640 void FindBarView::OnNativeThemeChanged(const ui::NativeTheme* theme) { | |
641 if (!ui::MaterialDesignController::IsModeMaterial()) | |
642 return; | |
643 | |
644 SkColor color = | |
645 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); | |
646 set_background(views::Background::CreateSolidBackground(color)); | |
647 match_count_text_->SetBackgroundColor(color); | |
648 } | |
OLD | NEW |