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

Side by Side Diff: chrome/browser/ui/views/omnibox/omnibox_result_view.cc

Issue 222613005: views: Fix linux omnibox colors by refactoring omnibox_result_view.cc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move table out of method so arraysize() works. Created 6 years, 8 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) 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 // For WinDDK ATL compatibility, these ATL headers must come first. 5 // For WinDDK ATL compatibility, these ATL headers must come first.
6 #include "build/build_config.h" 6 #include "build/build_config.h"
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <atlbase.h> // NOLINT 8 #include <atlbase.h> // NOLINT
9 #include <atlwin.h> // NOLINT 9 #include <atlwin.h> // NOLINT
10 #endif 10 #endif
(...skipping 23 matching lines...) Expand all
34 #include "ui/native_theme/native_theme.h" 34 #include "ui/native_theme/native_theme.h"
35 35
36 #if defined(OS_WIN) 36 #if defined(OS_WIN)
37 #include "ui/native_theme/native_theme_win.h" 37 #include "ui/native_theme/native_theme_win.h"
38 #endif 38 #endif
39 39
40 #if defined(USE_AURA) 40 #if defined(USE_AURA)
41 #include "ui/native_theme/native_theme_aura.h" 41 #include "ui/native_theme/native_theme_aura.h"
42 #endif 42 #endif
43 43
44 using ui::NativeTheme;
45
44 namespace { 46 namespace {
45 47
46 // The minimum distance between the top and bottom of the {icon|text} and the 48 // The minimum distance between the top and bottom of the {icon|text} and the
47 // top or bottom of the row. 49 // top or bottom of the row.
48 const int kMinimumIconVerticalPadding = 2; 50 const int kMinimumIconVerticalPadding = 2;
49 const int kMinimumTextVerticalPadding = 3; 51 const int kMinimumTextVerticalPadding = 3;
50 52
53 // A mapping from OmniboxResultView's ResultViewState/ColorKind types to
54 // NativeTheme colors.
55 struct TranslationTable {
56 ui::NativeTheme::ColorId id;
57 OmniboxResultView::ResultViewState state;
58 OmniboxResultView::ColorKind kind;
59 } static const kTranslationTable[] = {
60 { NativeTheme::kColorId_ResultsTableNormalBackground,
61 OmniboxResultView::NORMAL, OmniboxResultView::BACKGROUND },
62 { NativeTheme::kColorId_ResultsTableHoveredBackground,
63 OmniboxResultView::HOVERED, OmniboxResultView::BACKGROUND },
64 { NativeTheme::kColorId_ResultsTableSelectedBackground,
65 OmniboxResultView::SELECTED, OmniboxResultView::BACKGROUND },
66 { NativeTheme::kColorId_ResultsTableNormalText,
67 OmniboxResultView::NORMAL, OmniboxResultView::TEXT },
68 { NativeTheme::kColorId_ResultsTableHoveredText,
69 OmniboxResultView::HOVERED, OmniboxResultView::TEXT },
70 { NativeTheme::kColorId_ResultsTableSelectedText,
71 OmniboxResultView::SELECTED, OmniboxResultView::TEXT },
72 { NativeTheme::kColorId_ResultsTableNormalDimmedText,
73 OmniboxResultView::NORMAL, OmniboxResultView::DIMMED_TEXT },
74 { NativeTheme::kColorId_ResultsTableHoveredDimmedText,
75 OmniboxResultView::HOVERED, OmniboxResultView::DIMMED_TEXT },
76 { NativeTheme::kColorId_ResultsTableSelectedDimmedText,
77 OmniboxResultView::SELECTED, OmniboxResultView::DIMMED_TEXT },
78 { NativeTheme::kColorId_ResultsTableNormalUrl,
79 OmniboxResultView::NORMAL, OmniboxResultView::URL },
80 { NativeTheme::kColorId_ResultsTableHoveredUrl,
81 OmniboxResultView::HOVERED, OmniboxResultView::URL },
82 { NativeTheme::kColorId_ResultsTableSelectedUrl,
83 OmniboxResultView::SELECTED, OmniboxResultView::URL },
84 { NativeTheme::kColorId_ResultsTableNormalDivider,
85 OmniboxResultView::NORMAL, OmniboxResultView::DIVIDER },
86 { NativeTheme::kColorId_ResultsTableHoveredDivider,
87 OmniboxResultView::HOVERED, OmniboxResultView::DIVIDER },
88 { NativeTheme::kColorId_ResultsTableSelectedDivider,
89 OmniboxResultView::SELECTED, OmniboxResultView::DIVIDER },
90 };
91
51 } // namespace 92 } // namespace
52 93
53 //////////////////////////////////////////////////////////////////////////////// 94 ////////////////////////////////////////////////////////////////////////////////
54 // OmniboxResultView, public: 95 // OmniboxResultView, public:
55 96
56 // This class is a utility class for calculations affected by whether the result 97 // This class is a utility class for calculations affected by whether the result
57 // view is horizontally mirrored. The drawing functions can be written as if 98 // view is horizontally mirrored. The drawing functions can be written as if
58 // all drawing occurs left-to-right, and then use this class to get the actual 99 // all drawing occurs left-to-right, and then use this class to get the actual
59 // coordinates to begin drawing onscreen. 100 // coordinates to begin drawing onscreen.
60 class OmniboxResultView::MirroringContext { 101 class OmniboxResultView::MirroringContext {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 keyword_icon_->SetImage(GetKeywordIcon()); 159 keyword_icon_->SetImage(GetKeywordIcon());
119 keyword_icon_->SizeToPreferredSize(); 160 keyword_icon_->SizeToPreferredSize();
120 } 161 }
121 162
122 OmniboxResultView::~OmniboxResultView() { 163 OmniboxResultView::~OmniboxResultView() {
123 } 164 }
124 165
125 SkColor OmniboxResultView::GetColor( 166 SkColor OmniboxResultView::GetColor(
126 ResultViewState state, 167 ResultViewState state,
127 ColorKind kind) const { 168 ColorKind kind) const {
128 const ui::NativeTheme* theme = GetNativeTheme(); 169 for (size_t i = 0; i < arraysize(kTranslationTable); ++i) {
129 #if defined(OS_WIN) 170 if (kTranslationTable[i].state == state &&
130 if (theme == ui::NativeThemeWin::instance()) { 171 kTranslationTable[i].kind == kind) {
131 static bool win_initialized = false; 172 return GetNativeTheme()->GetSystemColor(kTranslationTable[i].id);
132 static SkColor win_colors[NUM_STATES][NUM_KINDS];
133 if (!win_initialized) {
134 win_colors[NORMAL][BACKGROUND] = color_utils::GetSysSkColor(COLOR_WINDOW);
135 win_colors[SELECTED][BACKGROUND] =
136 color_utils::GetSysSkColor(COLOR_HIGHLIGHT);
137 win_colors[NORMAL][TEXT] = color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
138 win_colors[SELECTED][TEXT] =
139 color_utils::GetSysSkColor(COLOR_HIGHLIGHTTEXT);
140 CommonInitColors(theme, win_colors);
141 win_initialized = true;
142 } 173 }
143 return win_colors[state][kind];
144 } 174 }
145 #endif 175
146 static bool initialized = false; 176 NOTREACHED();
147 static SkColor colors[NUM_STATES][NUM_KINDS]; 177 return SK_ColorRED;
148 if (!initialized) {
149 colors[NORMAL][BACKGROUND] = theme->GetSystemColor(
150 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
151 colors[NORMAL][TEXT] = theme->GetSystemColor(
152 ui::NativeTheme::kColorId_TextfieldDefaultColor);
153 colors[NORMAL][URL] = SkColorSetARGB(0xff, 0x00, 0x99, 0x33);
154 colors[SELECTED][BACKGROUND] = theme->GetSystemColor(
155 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
156 colors[SELECTED][TEXT] = theme->GetSystemColor(
157 ui::NativeTheme::kColorId_TextfieldSelectionColor);
158 colors[SELECTED][URL] = SkColorSetARGB(0xff, 0x00, 0x66, 0x22);
159 colors[HOVERED][URL] = SkColorSetARGB(0xff, 0x00, 0x66, 0x22);
160 CommonInitColors(theme, colors);
161 initialized = true;
162 }
163 return colors[state][kind];
164 } 178 }
165 179
166 void OmniboxResultView::SetMatch(const AutocompleteMatch& match) { 180 void OmniboxResultView::SetMatch(const AutocompleteMatch& match) {
167 match_ = match; 181 match_ = match;
168 ResetRenderTexts(); 182 ResetRenderTexts();
169 animation_->Reset(); 183 animation_->Reset();
170 184
171 AutocompleteMatch* associated_keyword_match = match_.associated_keyword.get(); 185 AutocompleteMatch* associated_keyword_match = match_.associated_keyword.get();
172 if (associated_keyword_match) { 186 if (associated_keyword_match) {
173 keyword_icon_->SetImage(GetKeywordIcon()); 187 keyword_icon_->SetImage(GetKeywordIcon());
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 input_render_text->GetGlyphBounds(contents_start_index); 422 input_render_text->GetGlyphBounds(contents_start_index);
409 const int start_padding = is_match_contents_rtl ? 423 const int start_padding = is_match_contents_rtl ?
410 std::max(glyph_bounds.start(), glyph_bounds.end()) : 424 std::max(glyph_bounds.start(), glyph_bounds.end()) :
411 std::min(glyph_bounds.start(), glyph_bounds.end()); 425 std::min(glyph_bounds.start(), glyph_bounds.end());
412 426
413 return is_ui_rtl ? 427 return is_ui_rtl ?
414 (input_render_text->GetContentWidth() - start_padding) : start_padding; 428 (input_render_text->GetContentWidth() - start_padding) : start_padding;
415 } 429 }
416 430
417 // static 431 // static
418 void OmniboxResultView::CommonInitColors(const ui::NativeTheme* theme,
419 SkColor colors[][NUM_KINDS]) {
420 colors[HOVERED][BACKGROUND] =
421 color_utils::AlphaBlend(colors[SELECTED][BACKGROUND],
422 colors[NORMAL][BACKGROUND], 64);
423 colors[HOVERED][TEXT] = colors[NORMAL][TEXT];
424 #if defined(USE_AURA)
425 const bool is_aura = theme == ui::NativeThemeAura::instance();
426 #else
427 const bool is_aura = false;
428 #endif
429 for (int i = 0; i < NUM_STATES; ++i) {
430 if (is_aura) {
431 colors[i][TEXT] =
432 color_utils::AlphaBlend(SK_ColorBLACK, colors[i][BACKGROUND], 0xdd);
433 colors[i][DIMMED_TEXT] =
434 color_utils::AlphaBlend(SK_ColorBLACK, colors[i][BACKGROUND], 0xbb);
435 } else {
436 colors[i][DIMMED_TEXT] =
437 color_utils::AlphaBlend(colors[i][TEXT], colors[i][BACKGROUND], 128);
438 colors[i][URL] = color_utils::GetReadableColor(SkColorSetRGB(0, 128, 0),
439 colors[i][BACKGROUND]);
440 }
441
442 // TODO(joi): Programmatically draw the dropdown border using
443 // this color as well. (Right now it's drawn as black with 25%
444 // alpha.)
445 colors[i][DIVIDER] =
446 color_utils::AlphaBlend(colors[i][TEXT], colors[i][BACKGROUND], 0x34);
447 }
448 }
449
450 // static
451 int OmniboxResultView::default_icon_size_ = 0; 432 int OmniboxResultView::default_icon_size_ = 0;
452 433
453 gfx::ImageSkia OmniboxResultView::GetIcon() const { 434 gfx::ImageSkia OmniboxResultView::GetIcon() const {
454 const gfx::Image image = model_->GetIconIfExtensionMatch(model_index_); 435 const gfx::Image image = model_->GetIconIfExtensionMatch(model_index_);
455 if (!image.IsEmpty()) 436 if (!image.IsEmpty())
456 return image.AsImageSkia(); 437 return image.AsImageSkia();
457 438
458 int icon = match_.starred ? 439 int icon = match_.starred ?
459 IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match_.type); 440 IDR_OMNIBOX_STAR : AutocompleteMatch::TypeToIcon(match_.type);
460 if (GetState() == SELECTED) { 441 if (GetState() == SELECTED) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 } 563 }
583 PaintMatch(*keyword_match, keyword_contents_rendertext_.get(), 564 PaintMatch(*keyword_match, keyword_contents_rendertext_.get(),
584 keyword_description_rendertext_.get(), canvas, x); 565 keyword_description_rendertext_.get(), canvas, x);
585 } 566 }
586 } 567 }
587 568
588 void OmniboxResultView::AnimationProgressed(const gfx::Animation* animation) { 569 void OmniboxResultView::AnimationProgressed(const gfx::Animation* animation) {
589 Layout(); 570 Layout();
590 SchedulePaint(); 571 SchedulePaint();
591 } 572 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/omnibox/omnibox_result_view.h ('k') | ui/native_theme/fallback_theme.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698