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

Side by Side Diff: chrome/browser/ui/views/default_search_view.cc

Issue 8221027: Make views::Label and views::Link auto-color themselves to be readable over their background colo... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/default_search_view.h" 5 #include "chrome/browser/ui/views/default_search_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/search_engines/template_url.h" 11 #include "chrome/browser/search_engines/template_url.h"
12 #include "chrome/browser/search_engines/template_url_service.h" 12 #include "chrome/browser/search_engines/template_url_service.h"
13 #include "chrome/browser/search_engines/template_url_service_factory.h"
13 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" 14 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
15 #include "chrome/browser/themes/theme_service.h"
14 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 16 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
15 #include "chrome/browser/ui/views/constrained_window_views.h" 17 #include "chrome/browser/ui/views/constrained_window_views.h"
16 #include "content/browser/tab_contents/tab_contents.h" 18 #include "content/browser/tab_contents/tab_contents.h"
17 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
18 #include "grit/locale_settings.h" 20 #include "grit/locale_settings.h"
19 #include "grit/theme_resources.h" 21 #include "grit/theme_resources.h"
20 #include "ui/base/message_box_flags.h" 22 #include "ui/base/message_box_flags.h"
21 #include "ui/base/l10n/l10n_util.h" 23 #include "ui/base/l10n/l10n_util.h"
22 #include "ui/base/resource/resource_bundle.h" 24 #include "ui/base/resource/resource_bundle.h"
23 #include "ui/gfx/canvas.h" 25 #include "ui/gfx/canvas.h"
(...skipping 29 matching lines...) Expand all
53 *logo_id = built_in_data->logo_id(); 55 *logo_id = built_in_data->logo_id();
54 } else { 56 } else {
55 *short_name = UTF8ToWide(url.host()).c_str(); 57 *short_name = UTF8ToWide(url.host()).c_str();
56 *logo_id = kNoSearchEngineLogo; 58 *logo_id = kNoSearchEngineLogo;
57 } 59 }
58 } 60 }
59 61
60 views::Label* CreateProviderLabel(int message_id) { 62 views::Label* CreateProviderLabel(int message_id) {
61 views::Label* choice_label = 63 views::Label* choice_label =
62 new views::Label(l10n_util::GetStringUTF16(message_id)); 64 new views::Label(l10n_util::GetStringUTF16(message_id));
63 choice_label->SetColor(SK_ColorBLACK); 65 choice_label->SetBackgroundColor(SK_ColorWHITE);
66 choice_label->SetEnabledColor(SK_ColorBLACK);
64 choice_label->SetFont( 67 choice_label->SetFont(
65 choice_label->font().DeriveFont(1, gfx::Font::NORMAL)); 68 choice_label->font().DeriveFont(1, gfx::Font::NORMAL));
66 return choice_label; 69 return choice_label;
67 } 70 }
68 71
69 views::View* CreateProviderLogo( 72 views::View* CreateProviderLogo(
70 int logo_id, 73 int logo_id,
71 const std::wstring& short_name) { 74 const std::wstring& short_name) {
72 views::View* logo_view = NULL; 75 views::View* logo_view = NULL;
73 76
74 // The width for the "logo" element when text is displayed. 77 // The width for the "logo" element when text is displayed.
75 const int kTextLogoWidth = 132; 78 const int kTextLogoWidth = 132;
76 79
77 bool use_images = false; 80 bool use_images = false;
78 #if defined(GOOGLE_CHROME_BUILD) 81 #if defined(GOOGLE_CHROME_BUILD)
79 use_images = true; 82 use_images = true;
80 #endif 83 #endif
81 84
82 if (use_images && logo_id != kNoSearchEngineLogo) { 85 if (use_images && logo_id != kNoSearchEngineLogo) {
83 views::ImageView* logo_image = new views::ImageView(); 86 views::ImageView* logo_image = new views::ImageView();
84 SkBitmap* logo_bmp = 87 SkBitmap* logo_bmp =
85 ResourceBundle::GetSharedInstance().GetBitmapNamed(logo_id); 88 ResourceBundle::GetSharedInstance().GetBitmapNamed(logo_id);
86 logo_image->SetImage(logo_bmp); 89 logo_image->SetImage(logo_bmp);
87 logo_image->SetTooltipText(WideToUTF16Hack(short_name)); 90 logo_image->SetTooltipText(WideToUTF16Hack(short_name));
88 logo_view = logo_image; 91 logo_view = logo_image;
89 } else { 92 } else {
90 // No logo -- show a text label. 93 // No logo -- show a text label.
91 views::Label* logo_label = new views::Label(short_name); 94 views::Label* logo_label = new views::Label(short_name);
92 logo_label->SetColor(SK_ColorDKGRAY); 95 logo_label->SetBackgroundColor(SK_ColorWHITE);
96 logo_label->SetEnabledColor(SK_ColorDKGRAY);
93 logo_label->SetFont(logo_label->font().DeriveFont(3, gfx::Font::BOLD)); 97 logo_label->SetFont(logo_label->font().DeriveFont(3, gfx::Font::BOLD));
94 logo_label->SetHorizontalAlignment(views::Label::ALIGN_CENTER); 98 logo_label->SetHorizontalAlignment(views::Label::ALIGN_CENTER);
95 // Tooltip text provides accessibility for low-vision users. 99 // Tooltip text provides accessibility for low-vision users.
96 logo_label->SetTooltipText(WideToUTF16Hack(short_name)); 100 logo_label->SetTooltipText(WideToUTF16Hack(short_name));
97 logo_view = logo_label; 101 logo_view = logo_label;
98 } 102 }
99 103
100 return logo_view; 104 return logo_view;
101 } 105 }
102 views::View* CreateProviderChoiceButton( 106 views::View* CreateProviderChoiceButton(
103 views::ButtonListener* listener, 107 views::ButtonListener* listener,
104 int message_id, 108 int message_id,
105 const std::wstring& short_name) { 109 const std::wstring& short_name) {
106 return new views::NativeTextButton(listener, UTF16ToWide( 110 return new views::NativeTextButton(listener, UTF16ToWide(
107 l10n_util::GetStringFUTF16(message_id, WideToUTF16(short_name)))); 111 l10n_util::GetStringFUTF16(message_id, WideToUTF16(short_name))));
108 } 112 }
109 113
110 } // namespace 114 } // namespace
111 115
112 // static 116 // static
113 void DefaultSearchView::Show(TabContents* tab_contents, 117 void DefaultSearchView::Show(TabContents* tab_contents,
114 TemplateURL* default_url, 118 TemplateURL* proposed_default_turl,
115 TemplateURLService* template_url_service) { 119 Profile* profile) {
116 scoped_ptr<TemplateURL> template_url(default_url); 120 TemplateURLService* template_url_service =
117 if (!template_url_service->CanMakeDefault(default_url) || 121 TemplateURLServiceFactory::GetForProfile(profile);
118 default_url->url()->GetHost().empty()) 122 if (template_url_service->CanMakeDefault(proposed_default_turl) &&
119 return; 123 !proposed_default_turl->url()->GetHost().empty()) {
120 124 // When the window closes, it will delete itself.
121 // When the window closes, it will delete itself. 125 new DefaultSearchView(tab_contents, proposed_default_turl,
122 new DefaultSearchView(tab_contents, template_url.release(), 126 template_url_service, profile->GetPrefs());
123 template_url_service); 127 } else {
128 delete proposed_default_turl;
129 }
124 } 130 }
125 131
126 DefaultSearchView::~DefaultSearchView() { 132 DefaultSearchView::~DefaultSearchView() {
127 } 133 }
128 134
129 void DefaultSearchView::OnPaint(gfx::Canvas* canvas) { 135 void DefaultSearchView::OnPaint(gfx::Canvas* canvas) {
130 // Fill in behind the background image with the standard gray toolbar color. 136 // Fill in behind the background image with the standard gray toolbar color.
131 canvas->FillRectInt(SkColorSetRGB(237, 238, 237), 0, 0, width(), 137 canvas->FillRectInt(GetThemeProvider()->GetColor(ThemeService::COLOR_TOOLBAR),
132 background_image_->height()); 138 0, 0, width(), background_image_->height());
133 // The rest of the dialog background should be white. 139 // The rest of the dialog background should be white.
134 DCHECK(height() > background_image_->height()); 140 DCHECK(height() > background_image_->height());
135 canvas->FillRectInt(SK_ColorWHITE, 0, background_image_->height(), width(), 141 canvas->FillRectInt(SK_ColorWHITE, 0, background_image_->height(), width(),
136 height() - background_image_->height()); 142 height() - background_image_->height());
137 } 143 }
138 144
139 void DefaultSearchView::ButtonPressed(views::Button* sender, 145 void DefaultSearchView::ButtonPressed(views::Button* sender,
140 const views::Event& event) { 146 const views::Event& event) {
141 views::DialogClientView* client = GetDialogClientView(); 147 views::DialogClientView* client = GetDialogClientView();
142 if (sender == proposed_provider_button_) 148 if (sender == proposed_provider_button_)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 views::Widget* DefaultSearchView::GetWidget() { 182 views::Widget* DefaultSearchView::GetWidget() {
177 return View::GetWidget(); 183 return View::GetWidget();
178 } 184 }
179 185
180 const views::Widget* DefaultSearchView::GetWidget() const { 186 const views::Widget* DefaultSearchView::GetWidget() const {
181 return View::GetWidget(); 187 return View::GetWidget();
182 } 188 }
183 189
184 DefaultSearchView::DefaultSearchView(TabContents* tab_contents, 190 DefaultSearchView::DefaultSearchView(TabContents* tab_contents,
185 TemplateURL* proposed_default_turl, 191 TemplateURL* proposed_default_turl,
186 TemplateURLService* template_url_service) 192 TemplateURLService* template_url_service,
193 PrefService* prefs)
187 : background_image_(NULL), 194 : background_image_(NULL),
188 default_provider_button_(NULL), 195 default_provider_button_(NULL),
189 proposed_provider_button_(NULL), 196 proposed_provider_button_(NULL),
190 proposed_turl_(proposed_default_turl), 197 proposed_turl_(proposed_default_turl),
191 template_url_service_(template_url_service) { 198 template_url_service_(template_url_service) {
192 Profile* profile =
193 Profile::FromBrowserContext(tab_contents->browser_context());
194 PrefService* prefs = profile->GetPrefs();
195 SetupControls(prefs); 199 SetupControls(prefs);
196 200
197 // Show the dialog. 201 // Show the dialog.
198 TabContentsWrapper* wrapper = 202 new ConstrainedWindowViews(
199 TabContentsWrapper::GetCurrentWrapperForContents(tab_contents); 203 TabContentsWrapper::GetCurrentWrapperForContents(tab_contents), this);
200 new ConstrainedWindowViews(wrapper, this);
201 } 204 }
202 205
203 void DefaultSearchView::SetupControls(PrefService* prefs) { 206 void DefaultSearchView::SetupControls(PrefService* prefs) {
204 using views::ColumnSet;
205 using views::GridLayout;
206 using views::ImageView;
207 using views::Label;
208
209 // Column set id's. 207 // Column set id's.
210 const int kWholeDialogViewSetId = 0; 208 const int kWholeDialogViewSetId = 0;
211 const int kPaddedWholeDialogViewSetId = 1; 209 const int kPaddedWholeDialogViewSetId = 1;
212 const int kChoicesViewSetId = 2; 210 const int kChoicesViewSetId = 2;
213 211
214 // Set up the information for the proposed default. 212 // Set up the information for the proposed default.
215 std::wstring proposed_short_name; 213 std::wstring proposed_short_name;
216 int proposed_logo_id = kNoSearchEngineLogo; 214 int proposed_logo_id = kNoSearchEngineLogo;
217 GetShortNameAndLogoId(prefs, 215 GetShortNameAndLogoId(prefs,
218 proposed_turl_.get(), 216 proposed_turl_.get(),
219 &proposed_short_name, 217 &proposed_short_name,
220 &proposed_logo_id); 218 &proposed_logo_id);
221 if (proposed_logo_id != kNoSearchEngineLogo) 219 if (proposed_logo_id != kNoSearchEngineLogo)
222 proposed_turl_->set_logo_id(proposed_logo_id); 220 proposed_turl_->set_logo_id(proposed_logo_id);
223 221
224 222
225 // Set up the information for the current default. 223 // Set up the information for the current default.
226 std::wstring default_short_name; 224 std::wstring default_short_name;
227 int default_logo_id = kNoSearchEngineLogo; 225 int default_logo_id = kNoSearchEngineLogo;
228 GetShortNameAndLogoId(prefs, 226 GetShortNameAndLogoId(prefs,
229 template_url_service_->GetDefaultSearchProvider(), 227 template_url_service_->GetDefaultSearchProvider(),
230 &default_short_name, 228 &default_short_name,
231 &default_logo_id); 229 &default_logo_id);
232 230
233 // Now set-up the dialog contents. 231 // Now set-up the dialog contents.
234 GridLayout* layout = new views::GridLayout(this); 232 views::GridLayout* layout = new views::GridLayout(this);
235 layout->SetInsets(0, 0, views::kPanelVertMargin, 0); 233 layout->SetInsets(0, 0, views::kPanelVertMargin, 0);
236 SetLayoutManager(layout); 234 SetLayoutManager(layout);
237 235
238 // Add a column set that spans the whole dialog. 236 // Add a column set that spans the whole dialog.
239 ColumnSet* whole_dialog_column_set = 237 views::ColumnSet* whole_dialog_column_set =
240 layout->AddColumnSet(kWholeDialogViewSetId); 238 layout->AddColumnSet(kWholeDialogViewSetId);
241 whole_dialog_column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 239 whole_dialog_column_set->AddColumn(views::GridLayout::LEADING,
242 1, GridLayout::FIXED, 240 views::GridLayout::LEADING, 1, views::GridLayout::FIXED,
243 views::Widget::GetLocalizedContentsWidth( 241 views::Widget::GetLocalizedContentsWidth(IDS_DEFAULT_SEARCH_WIDTH_CHARS),
244 IDS_DEFAULT_SEARCH_WIDTH_CHARS), 242 0);
245 0);
246 243
247 // Add a column set that spans the whole dialog but obeying padding. 244 // Add a column set that spans the whole dialog but obeying padding.
248 ColumnSet* padded_whole_dialog_column_set = 245 views::ColumnSet* padded_whole_dialog_column_set =
249 layout->AddColumnSet(kPaddedWholeDialogViewSetId); 246 layout->AddColumnSet(kPaddedWholeDialogViewSetId);
250 padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin); 247 padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
251 padded_whole_dialog_column_set->AddColumn( 248 padded_whole_dialog_column_set->AddColumn(views::GridLayout::LEADING,
252 GridLayout::LEADING, GridLayout::LEADING, 249 views::GridLayout::LEADING, 1, views::GridLayout::USE_PREF, 0, 0);
253 1, GridLayout::USE_PREF, 0, 0);
254 padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin); 250 padded_whole_dialog_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
255 251
256 // Add a column set for the search engine choices. 252 // Add a column set for the search engine choices.
257 ColumnSet* choices_column_set = layout->AddColumnSet(kChoicesViewSetId); 253 views::ColumnSet* choices_column_set =
254 layout->AddColumnSet(kChoicesViewSetId);
258 choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin); 255 choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
259 choices_column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 256 choices_column_set->AddColumn(views::GridLayout::CENTER,
260 1, GridLayout::USE_PREF, 0, 0); 257 views::GridLayout::CENTER, 1, views::GridLayout::USE_PREF, 0, 0);
261 choices_column_set->AddPaddingColumn( 258 choices_column_set->AddPaddingColumn(
262 1, views::kRelatedControlHorizontalSpacing); 259 1, views::kRelatedControlHorizontalSpacing);
263 choices_column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 260 choices_column_set->AddColumn(views::GridLayout::CENTER,
264 1, GridLayout::USE_PREF, 0, 0); 261 views::GridLayout::CENTER, 1, views::GridLayout::USE_PREF, 0, 0);
265 choices_column_set->LinkColumnSizes(0, 2, -1); 262 choices_column_set->LinkColumnSizes(0, 2, -1);
266 choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin); 263 choices_column_set->AddPaddingColumn(1, views::kPanelVertMargin);
267 264
268 // Add the "search box" image. 265 // Add the "search box" image.
269 layout->StartRow(0, kWholeDialogViewSetId); 266 layout->StartRow(0, kWholeDialogViewSetId);
270 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 267 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
271 background_image_ = new ImageView(); 268 background_image_ = new views::ImageView();
272 background_image_->SetImage(rb.GetBitmapNamed(IDR_SEARCH_ENGINE_DIALOG_TOP)); 269 background_image_->SetImage(rb.GetBitmapNamed(IDR_SEARCH_ENGINE_DIALOG_TOP));
273 background_image_->EnableCanvasFlippingForRTLUI(true); 270 background_image_->EnableCanvasFlippingForRTLUI(true);
274 ImageView::Alignment horizontal_alignment = 271 views::ImageView::Alignment horizontal_alignment = base::i18n::IsRTL() ?
275 base::i18n::IsRTL() ? ImageView::LEADING : ImageView::TRAILING; 272 views::ImageView::LEADING : views::ImageView::TRAILING;
276 background_image_->SetHorizontalAlignment(horizontal_alignment); 273 background_image_->SetHorizontalAlignment(horizontal_alignment);
277 layout->AddView(background_image_); 274 layout->AddView(background_image_);
278 275
279 // Add text informing the user about the requested default change. 276 // Add text informing the user about the requested default change.
280 layout->StartRowWithPadding(0, kPaddedWholeDialogViewSetId, 277 layout->StartRowWithPadding(0, kPaddedWholeDialogViewSetId,
281 1, views::kLabelToControlVerticalSpacing); 278 1, views::kLabelToControlVerticalSpacing);
282 Label* summary_label = new Label(l10n_util::GetStringFUTF16( 279 views::Label* summary_label = new views::Label(l10n_util::GetStringFUTF16(
283 IDS_DEFAULT_SEARCH_SUMMARY, 280 IDS_DEFAULT_SEARCH_SUMMARY, WideToUTF16(proposed_short_name)));
284 WideToUTF16(proposed_short_name))); 281 summary_label->SetBackgroundColor(SK_ColorWHITE);
285 summary_label->SetColor(SK_ColorBLACK); 282 summary_label->SetEnabledColor(SK_ColorBLACK);
286 summary_label->SetFont( 283 summary_label->SetFont(
287 summary_label->font().DeriveFont(1, gfx::Font::NORMAL)); 284 summary_label->font().DeriveFont(1, gfx::Font::NORMAL));
288 summary_label->SetHorizontalAlignment(Label::ALIGN_LEFT); 285 summary_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
289 layout->AddView(summary_label); 286 layout->AddView(summary_label);
290 287
291 // Add the labels for the tops of the choices. 288 // Add the labels for the tops of the choices.
292 layout->StartRowWithPadding(0, kChoicesViewSetId, 289 layout->StartRowWithPadding(0, kChoicesViewSetId,
293 0, views::kRelatedControlVerticalSpacing); 290 0, views::kRelatedControlVerticalSpacing);
294 layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_CURRENT)); 291 layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_CURRENT));
295 layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_PROPOSED)); 292 layout->AddView(CreateProviderLabel(IDS_DEFAULT_SEARCH_LABEL_PROPOSED));
296 293
297 // Add the logos. 294 // Add the logos.
298 layout->StartRowWithPadding(0, kChoicesViewSetId, 295 layout->StartRowWithPadding(0, kChoicesViewSetId,
299 0, views::kRelatedControlVerticalSpacing); 296 0, views::kRelatedControlVerticalSpacing);
300 layout->AddView(CreateProviderLogo(default_logo_id, default_short_name)); 297 layout->AddView(CreateProviderLogo(default_logo_id, default_short_name));
301 layout->AddView(CreateProviderLogo(proposed_logo_id, proposed_short_name)); 298 layout->AddView(CreateProviderLogo(proposed_logo_id, proposed_short_name));
302 299
303 // Add the buttons. 300 // Add the buttons.
304 layout->StartRowWithPadding(0, kChoicesViewSetId, 301 layout->StartRowWithPadding(0, kChoicesViewSetId,
305 0, views::kRelatedControlVerticalSpacing); 302 0, views::kRelatedControlVerticalSpacing);
306 default_provider_button_ = CreateProviderChoiceButton( 303 default_provider_button_ = CreateProviderChoiceButton(
307 this, 304 this,
308 IDS_DEFAULT_SEARCH_PROMPT_CURRENT, 305 IDS_DEFAULT_SEARCH_PROMPT_CURRENT,
309 default_short_name); 306 default_short_name);
310 layout->AddView(default_provider_button_); 307 layout->AddView(default_provider_button_);
311 proposed_provider_button_ = CreateProviderChoiceButton( 308 proposed_provider_button_ = CreateProviderChoiceButton(
312 this, 309 this,
313 IDS_DEFAULT_SEARCH_PROMPT_PROPOSED, 310 IDS_DEFAULT_SEARCH_PROMPT_PROPOSED,
314 proposed_short_name); 311 proposed_short_name);
315 layout->AddView(proposed_provider_button_); 312 layout->AddView(proposed_provider_button_);
316 } 313 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/default_search_view.h ('k') | chrome/browser/ui/views/download/download_item_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698