Chromium Code Reviews| 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/location_bar/keyword_hint_view.h" | 5 #include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "chrome/app/chrome_command_ids.h" | 11 #include "chrome/app/chrome_command_ids.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/search_engines/template_url_service_factory.h" | 13 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 14 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" | 14 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
| 15 #include "chrome/grit/generated_resources.h" | 15 #include "chrome/grit/generated_resources.h" |
| 16 #include "components/search_engines/template_url_service.h" | 16 #include "components/search_engines/template_url_service.h" |
| 17 #include "grit/theme_resources.h" | 17 #include "grit/theme_resources.h" |
| 18 #include "ui/base/l10n/l10n_util.h" | 18 #include "ui/base/l10n/l10n_util.h" |
| 19 #include "ui/base/resource/material_design/material_design_controller.h" | |
| 19 #include "ui/base/resource/resource_bundle.h" | 20 #include "ui/base/resource/resource_bundle.h" |
| 20 #include "ui/gfx/canvas.h" | 21 #include "ui/gfx/canvas.h" |
| 22 #include "ui/gfx/color_utils.h" | |
| 21 #include "ui/views/controls/image_view.h" | 23 #include "ui/views/controls/image_view.h" |
| 22 #include "ui/views/controls/label.h" | 24 #include "ui/views/controls/label.h" |
| 23 | 25 |
| 26 namespace { | |
| 27 | |
| 28 class TabKeyImage : public views::View { | |
| 29 public: | |
| 30 TabKeyImage() {} | |
|
Peter Kasting
2015/10/29 03:48:43
Nit: Avoid inlining these methods even for classes
| |
| 31 | |
| 32 // views::View implementation | |
|
Peter Kasting
2015/10/29 03:48:43
Nit: Just "// views::View:"
| |
| 33 gfx::Size GetPreferredSize() const override { return gfx::Size(34, 18); } | |
|
Peter Kasting
2015/10/29 03:48:43
We definitely shouldn't hardcode the width, and we
| |
| 34 | |
| 35 void OnPaint(gfx::Canvas* canvas) override { | |
|
Peter Kasting
2015/10/29 03:48:43
It seems like you probably want to SaveAndUnscale(
| |
| 36 gfx::RectF round_rect_bounds(GetLocalBounds()); | |
| 37 round_rect_bounds.Inset(0.5f, 0.5f); | |
| 38 SkScalar radius = SkIntToScalar(2); | |
|
Peter Kasting
2015/10/29 03:48:43
Does this match the EV/keyword search bubble corne
| |
| 39 SkPaint paint; | |
| 40 paint.setAntiAlias(true); | |
| 41 paint.setStrokeWidth(1); | |
| 42 paint.setColor( | |
| 43 color_utils::DeriveDefaultIconColor(GetNativeTheme()->GetSystemColor( | |
| 44 ui::NativeTheme::kColorId_TextfieldDefaultColor))); | |
| 45 paint.setStyle(SkPaint::kStroke_Style); | |
| 46 canvas->sk_canvas()->drawRoundRect(gfx::RectFToSkRect(round_rect_bounds), | |
| 47 radius, radius, paint); | |
| 48 | |
| 49 gfx::Rect text_bounds(GetLocalBounds()); | |
| 50 const int kTopPadding = 3; | |
| 51 const int kBottomPadding = 2; | |
| 52 text_bounds.Inset(0, kTopPadding, 0, kBottomPadding); | |
|
Peter Kasting
2015/10/29 03:48:43
I'm concerned about this implementation with diffe
| |
| 53 canvas->DrawStringRectWithFlags( | |
| 54 l10n_util::GetStringUTF16(IDS_TAB_KEY), | |
| 55 gfx::FontList().DeriveWithHeightUpperBound(text_bounds.height()), | |
| 56 paint.getColor(), text_bounds, gfx::Canvas::TEXT_ALIGN_CENTER); | |
| 57 } | |
| 58 | |
| 59 private: | |
| 60 DISALLOW_COPY_AND_ASSIGN(TabKeyImage); | |
| 61 }; | |
| 62 | |
| 63 // Creates and returns a view for depicting the tab key. | |
| 64 views::View* CreateTabKeyImage() { | |
|
Peter Kasting
2015/10/29 03:48:43
Nit: For clarity (that the caller is expected to t
| |
| 65 if (ui::MaterialDesignController::IsModeMaterial()) | |
| 66 return new TabKeyImage(); | |
| 67 | |
| 68 views::ImageView* tab = new views::ImageView(); | |
| 69 tab->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
| 70 IDR_OMNIBOX_KEYWORD_HINT_TAB)); | |
| 71 return tab; | |
| 72 } | |
| 73 | |
| 74 } // namespace | |
| 24 | 75 |
| 25 KeywordHintView::KeywordHintView(Profile* profile, | 76 KeywordHintView::KeywordHintView(Profile* profile, |
| 26 const gfx::FontList& font_list, | 77 const gfx::FontList& font_list, |
| 27 SkColor text_color, | 78 SkColor text_color, |
| 28 SkColor background_color) | 79 SkColor background_color) |
| 29 : profile_(profile), | 80 : profile_(profile), tab_key_image_(CreateTabKeyImage()) { |
| 30 tab_image_(new views::ImageView()) { | |
| 31 leading_label_ = | 81 leading_label_ = |
| 32 CreateLabel(font_list, text_color, background_color); | 82 CreateLabel(font_list, text_color, background_color); |
| 33 tab_image_->SetImage( | 83 AddChildView(tab_key_image_); |
| 34 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
| 35 IDR_OMNIBOX_KEYWORD_HINT_TAB)); | |
| 36 AddChildView(tab_image_); | |
| 37 trailing_label_ = | 84 trailing_label_ = |
| 38 CreateLabel(font_list, text_color, background_color); | 85 CreateLabel(font_list, text_color, background_color); |
| 39 } | 86 } |
| 40 | 87 |
| 41 KeywordHintView::~KeywordHintView() { | 88 KeywordHintView::~KeywordHintView() { |
| 42 } | 89 } |
| 43 | 90 |
| 44 void KeywordHintView::SetKeyword(const base::string16& keyword) { | 91 void KeywordHintView::SetKeyword(const base::string16& keyword) { |
| 45 keyword_ = keyword; | 92 keyword_ = keyword; |
| 46 if (keyword_.empty()) | 93 if (keyword_.empty()) |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 61 message_id, base::string16(), short_name, &content_param_offsets); | 108 message_id, base::string16(), short_name, &content_param_offsets); |
| 62 DCHECK_EQ(2U, content_param_offsets.size()); | 109 DCHECK_EQ(2U, content_param_offsets.size()); |
| 63 leading_label_->SetText( | 110 leading_label_->SetText( |
| 64 keyword_hint.substr(0, content_param_offsets.front())); | 111 keyword_hint.substr(0, content_param_offsets.front())); |
| 65 trailing_label_->SetText(keyword_hint.substr(content_param_offsets.front())); | 112 trailing_label_->SetText(keyword_hint.substr(content_param_offsets.front())); |
| 66 } | 113 } |
| 67 | 114 |
| 68 gfx::Size KeywordHintView::GetPreferredSize() const { | 115 gfx::Size KeywordHintView::GetPreferredSize() const { |
| 69 // Height will be ignored by the LocationBarView. | 116 // Height will be ignored by the LocationBarView. |
| 70 return gfx::Size(leading_label_->GetPreferredSize().width() + | 117 return gfx::Size(leading_label_->GetPreferredSize().width() + |
| 71 tab_image_->GetPreferredSize().width() + | 118 tab_key_image_->GetPreferredSize().width() + |
| 72 trailing_label_->GetPreferredSize().width(), | 119 trailing_label_->GetPreferredSize().width(), |
| 73 0); | 120 0); |
| 74 } | 121 } |
| 75 | 122 |
| 76 gfx::Size KeywordHintView::GetMinimumSize() const { | 123 gfx::Size KeywordHintView::GetMinimumSize() const { |
| 77 // Height will be ignored by the LocationBarView. | 124 // Height will be ignored by the LocationBarView. |
| 78 return tab_image_->GetPreferredSize(); | 125 return tab_key_image_->GetPreferredSize(); |
| 79 } | 126 } |
| 80 | 127 |
| 81 void KeywordHintView::Layout() { | 128 void KeywordHintView::Layout() { |
| 82 int tab_width = tab_image_->GetPreferredSize().width(); | 129 gfx::Size tab_size = tab_key_image_->GetPreferredSize(); |
| 83 bool show_labels = (width() != tab_width); | 130 bool show_labels = (width() != tab_size.width()); |
| 84 gfx::Size leading_size(leading_label_->GetPreferredSize()); | 131 gfx::Size leading_size(leading_label_->GetPreferredSize()); |
| 85 leading_label_->SetBounds(0, 0, show_labels ? leading_size.width() : 0, | 132 leading_label_->SetBounds(0, 0, show_labels ? leading_size.width() : 0, |
| 86 height()); | 133 height()); |
| 87 tab_image_->SetBounds(leading_label_->bounds().right(), 0, tab_width, | 134 tab_key_image_->SetBounds(leading_label_->bounds().right(), |
| 88 height()); | 135 (height() - tab_size.height()) / 2, |
| 136 tab_size.width(), tab_size.height()); | |
| 89 gfx::Size trailing_size(trailing_label_->GetPreferredSize()); | 137 gfx::Size trailing_size(trailing_label_->GetPreferredSize()); |
| 90 trailing_label_->SetBounds(tab_image_->bounds().right(), 0, | 138 trailing_label_->SetBounds(tab_key_image_->bounds().right(), 0, |
| 91 show_labels ? trailing_size.width() : 0, | 139 show_labels ? trailing_size.width() : 0, height()); |
| 92 height()); | |
| 93 } | 140 } |
| 94 | 141 |
| 95 const char* KeywordHintView::GetClassName() const { | 142 const char* KeywordHintView::GetClassName() const { |
| 96 return "KeywordHintView"; | 143 return "KeywordHintView"; |
| 97 } | 144 } |
| 98 | 145 |
| 99 views::Label* KeywordHintView::CreateLabel(const gfx::FontList& font_list, | 146 views::Label* KeywordHintView::CreateLabel(const gfx::FontList& font_list, |
| 100 SkColor text_color, | 147 SkColor text_color, |
| 101 SkColor background_color) { | 148 SkColor background_color) { |
| 102 views::Label* label = new views::Label(base::string16(), font_list); | 149 views::Label* label = new views::Label(base::string16(), font_list); |
| 103 label->SetEnabledColor(text_color); | 150 label->SetEnabledColor(text_color); |
| 104 label->SetBackgroundColor(background_color); | 151 label->SetBackgroundColor(background_color); |
| 105 AddChildView(label); | 152 AddChildView(label); |
| 106 return label; | 153 return label; |
| 107 } | 154 } |
| OLD | NEW |