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

Side by Side Diff: chrome/browser/ui/libgtkui/native_theme_gtk3.cc

Issue 2585893002: Gtk3: Fix various menu colors (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « chrome/browser/ui/libgtkui/native_theme_gtk3.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/libgtkui/native_theme_gtk3.h" 5 #include "chrome/browser/ui/libgtkui/native_theme_gtk3.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "base/strings/string_split.h" 9 #include "base/strings/string_split.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 17 matching lines...) Expand all
28 INSENSITIVE = 4, 28 INSENSITIVE = 4,
29 }; 29 };
30 30
31 // Same order as enum WidgetState above 31 // Same order as enum WidgetState above
32 const GtkStateFlags stateMap[] = { 32 const GtkStateFlags stateMap[] = {
33 GTK_STATE_FLAG_NORMAL, GTK_STATE_FLAG_ACTIVE, 33 GTK_STATE_FLAG_NORMAL, GTK_STATE_FLAG_ACTIVE,
34 GTK_STATE_FLAG_PRELIGHT, GTK_STATE_FLAG_SELECTED, 34 GTK_STATE_FLAG_PRELIGHT, GTK_STATE_FLAG_SELECTED,
35 GTK_STATE_FLAG_INSENSITIVE, 35 GTK_STATE_FLAG_INSENSITIVE,
36 }; 36 };
37 37
38 SkColor GetFGColor(GtkWidget* widget, WidgetState state) { 38 // The caller must g_object_unref the returned context.
39 GdkRGBA color; 39 GtkStyleContext* GetStyleContextFromCss(const char* css_selector) {
40 gtk_style_context_get_color(gtk_widget_get_style_context(widget), 40 GtkWidgetPath* path = gtk_widget_path_new();
41 stateMap[state], &color); 41 for (const auto& widget_type :
42 return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255); 42 base::SplitString(css_selector, base::kWhitespaceASCII,
43 } 43 base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
44 SkColor GetBGColor(GtkWidget* widget, WidgetState state) { 44 gtk_widget_path_append_type(path, G_TYPE_NONE);
45 GdkRGBA color; 45 for (const auto& widget_class :
46 base::SplitString(widget_type, ".", base::TRIM_WHITESPACE,
47 base::SPLIT_WANT_NONEMPTY)) {
48 gtk_widget_path_iter_add_class(path, -1, widget_class.c_str());
49 }
50 }
46 51
47 G_GNUC_BEGIN_IGNORE_DEPRECATIONS 52 GtkStyleContext* context = gtk_style_context_new();
48 gtk_style_context_get_background_color(gtk_widget_get_style_context(widget), 53 gtk_style_context_set_path(context, path);
49 stateMap[state], &color); 54 gtk_widget_path_unref(path);
50 G_GNUC_END_IGNORE_DEPRECATIONS 55 return context;
51
52 // Hack for default color
53 if (color.alpha == 0.0)
54 color = {1, 1, 1, 1};
55
56 return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255);
57 } 56 }
58 57
59 SkColor GetTextColor(GtkWidget* widget, WidgetState state) { 58 SkColor GdkRgbaToSkColor(const GdkRGBA& color) {
60 return GetFGColor(widget, state); 59 return SkColorSetARGB(color.alpha * 255, color.red * 255, color.green * 255,
60 color.blue * 255);
61 } 61 }
62 SkColor GetTextAAColor(GtkWidget* widget, WidgetState state) { 62
63 return GetFGColor(widget, state); 63 SkColor ColorFromContext(GtkStyleContext* context,
64 GtkStateFlags state,
65 const char* color_name) {
66 GdkRGBA* color = nullptr;
67 gtk_style_context_get(context, state, color_name, &color, nullptr);
68 DCHECK(color);
69 SkColor sk_color = GdkRgbaToSkColor(*color);
70 gdk_rgba_free(color);
71 return sk_color;
64 } 72 }
65 SkColor GetBaseColor(GtkWidget* widget, WidgetState state) { 73
66 return GetBGColor(widget, state); 74 SkColor GetFGColor(GtkWidget* widget, WidgetState state) {
75 return ColorFromContext(gtk_widget_get_style_context(widget), stateMap[state],
76 "color");
77 }
78
79 SkColor GetBGColor(GtkWidget* widget, WidgetState state) {
80 return ColorFromContext(gtk_widget_get_style_context(widget), stateMap[state],
81 "background-color");
82 }
83
84 SkColor GetFGColor(const char* css_selector, GtkStateFlags state) {
Elliot Glaysher 2016/12/16 21:55:59 Do you plan on having two GetFBColor functions ove
Tom (Use chromium acct) 2016/12/16 22:01:07 Just temporary during the conversion
85 GtkStyleContext* context = GetStyleContextFromCss(css_selector);
86 SkColor color = ColorFromContext(context, state, "color");
87 g_object_unref(context);
88 return color;
89 }
90
91 SkColor GetBGColor(const char* css_selector, GtkStateFlags state) {
92 GtkStyleContext* context = GetStyleContextFromCss(css_selector);
93 SkColor color = ColorFromContext(context, state, "background-color");
94 g_object_unref(context);
95 return color;
96 }
97
98 SkColor GetBorderColor(const char* css_selector, GtkStateFlags state) {
99 GtkStyleContext* context = GetStyleContextFromCss(css_selector);
100 GtkBorder border;
101 gtk_style_context_get_border(context, state, &border);
102 bool has_border = border.left || border.right || border.top || border.bottom;
103 SkColor color = ColorFromContext(
104 context, state, has_border ? "border-color" : "background-color");
105 g_object_unref(context);
106 return color;
67 } 107 }
68 108
69 void PaintWidget(SkCanvas* canvas, 109 void PaintWidget(SkCanvas* canvas,
70 const gfx::Rect& rect, 110 const gfx::Rect& rect,
71 const char* css_selector, 111 const char* css_selector,
72 GtkStateFlags state) { 112 GtkStateFlags state) {
73 SkBitmap bitmap; 113 SkBitmap bitmap;
74 bitmap.allocN32Pixels(rect.width(), rect.height()); 114 bitmap.allocN32Pixels(rect.width(), rect.height());
75 bitmap.eraseColor(0); 115 bitmap.eraseColor(0);
76 116
77 cairo_surface_t* surface = cairo_image_surface_create_for_data( 117 cairo_surface_t* surface = cairo_image_surface_create_for_data(
78 static_cast<unsigned char*>(bitmap.getAddr(0, 0)), CAIRO_FORMAT_ARGB32, 118 static_cast<unsigned char*>(bitmap.getAddr(0, 0)), CAIRO_FORMAT_ARGB32,
79 rect.width(), rect.height(), 119 rect.width(), rect.height(),
80 cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, rect.width())); 120 cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, rect.width()));
81 cairo_t* cr = cairo_create(surface); 121 cairo_t* cr = cairo_create(surface);
82 122
83 GtkWidgetPath* path = gtk_widget_path_new(); 123 GtkStyleContext* context = GetStyleContextFromCss(css_selector);
84 for (const auto& widget_type :
85 base::SplitString(css_selector, base::kWhitespaceASCII,
86 base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
87 gtk_widget_path_append_type(path, G_TYPE_NONE);
88 for (const auto& widget_class :
89 base::SplitString(widget_type, ".", base::TRIM_WHITESPACE,
90 base::SPLIT_WANT_NONEMPTY)) {
91 gtk_widget_path_iter_add_class(path, -1, widget_class.c_str());
92 }
93 }
94
95 GtkStyleContext* context = gtk_style_context_new();
96 gtk_style_context_set_path(context, path);
97 gtk_style_context_set_state(context, state); 124 gtk_style_context_set_state(context, state);
98 125
99 gtk_render_background(context, cr, 0, 0, rect.width(), rect.height()); 126 gtk_render_background(context, cr, 0, 0, rect.width(), rect.height());
100 gtk_render_frame(context, cr, 0, 0, rect.width(), rect.height()); 127 gtk_render_frame(context, cr, 0, 0, rect.width(), rect.height());
101 cairo_destroy(cr); 128 cairo_destroy(cr);
102 cairo_surface_destroy(surface); 129 cairo_surface_destroy(surface);
103 canvas->drawBitmap(bitmap, rect.x(), rect.y()); 130 canvas->drawBitmap(bitmap, rect.x(), rect.y());
104 131
105 g_object_unref(context); 132 g_object_unref(context);
106 gtk_widget_path_unref(path);
107 } 133 }
108 134
109 GtkStateFlags StateToStateFlags(NativeThemeGtk3::State state) { 135 GtkStateFlags StateToStateFlags(NativeThemeGtk3::State state) {
110 switch (state) { 136 switch (state) {
111 case NativeThemeGtk3::kDisabled: 137 case NativeThemeGtk3::kDisabled:
112 return GTK_STATE_FLAG_INSENSITIVE; 138 return GTK_STATE_FLAG_INSENSITIVE;
113 case NativeThemeGtk3::kHovered: 139 case NativeThemeGtk3::kHovered:
114 return GTK_STATE_FLAG_PRELIGHT; 140 return GTK_STATE_FLAG_PRELIGHT;
115 case NativeThemeGtk3::kNormal: 141 case NativeThemeGtk3::kNormal:
116 return GTK_STATE_FLAG_NORMAL; 142 return GTK_STATE_FLAG_NORMAL;
(...skipping 12 matching lines...) Expand all
129 NativeThemeGtk3* NativeThemeGtk3::instance() { 155 NativeThemeGtk3* NativeThemeGtk3::instance() {
130 CR_DEFINE_STATIC_LOCAL(NativeThemeGtk3, s_native_theme, ()); 156 CR_DEFINE_STATIC_LOCAL(NativeThemeGtk3, s_native_theme, ());
131 return &s_native_theme; 157 return &s_native_theme;
132 } 158 }
133 159
134 // Constructors automatically called 160 // Constructors automatically called
135 NativeThemeGtk3::NativeThemeGtk3() {} 161 NativeThemeGtk3::NativeThemeGtk3() {}
136 // This doesn't actually get called 162 // This doesn't actually get called
137 NativeThemeGtk3::~NativeThemeGtk3() {} 163 NativeThemeGtk3::~NativeThemeGtk3() {}
138 164
139 SkColor NativeThemeGtk3::GetSystemColor(ColorId color_id) const { 165 SkColor NativeThemeGtk3::LookupGtkThemeColor(ColorId color_id) const {
140 const SkColor kPositiveTextColor = SkColorSetRGB(0x0b, 0x80, 0x43); 166 const SkColor kPositiveTextColor = SkColorSetRGB(0x0b, 0x80, 0x43);
141 const SkColor kNegativeTextColor = SkColorSetRGB(0xc5, 0x39, 0x29); 167 const SkColor kNegativeTextColor = SkColorSetRGB(0xc5, 0x39, 0x29);
142 168
143 switch (color_id) { 169 switch (color_id) {
144 // Windows 170 // Windows
145 case kColorId_WindowBackground: 171 case kColorId_WindowBackground:
146 return GetBGColor(GetWindow(), SELECTED); 172 return GetBGColor(GetWindow(), SELECTED);
147 173
148 // Dialogs 174 // Dialogs
149 case kColorId_DialogBackground: 175 case kColorId_DialogBackground:
150 case kColorId_BubbleBackground: 176 case kColorId_BubbleBackground:
151 return GetBGColor(GetWindow(), NORMAL); 177 return GetBGColor(GetWindow(), NORMAL);
152 178
153 // FocusableBorder 179 // FocusableBorder
154 case kColorId_FocusedBorderColor: 180 case kColorId_FocusedBorderColor:
155 return GetBGColor(GetEntry(), SELECTED); 181 return GetBGColor(GetEntry(), SELECTED);
156 case kColorId_UnfocusedBorderColor: 182 case kColorId_UnfocusedBorderColor:
157 return GetTextAAColor(GetEntry(), NORMAL); 183 return GetFGColor(GetEntry(), NORMAL);
158 184
159 // MenuItem 185 // Menu
186 case kColorId_MenuBackgroundColor:
187 return GetBGColor("menu", GTK_STATE_FLAG_NORMAL);
188 case kColorId_MenuBorderColor:
189 return GetBorderColor("menu", GTK_STATE_FLAG_NORMAL);
190 case kColorId_FocusedMenuItemBackgroundColor:
191 return GetBGColor("menu menuitem", GTK_STATE_FLAG_FOCUSED);
192 case kColorId_EnabledMenuItemForegroundColor:
193 return GetFGColor("menu menuitem label", GTK_STATE_FLAG_NORMAL);
160 case kColorId_SelectedMenuItemForegroundColor: 194 case kColorId_SelectedMenuItemForegroundColor:
161 return GetTextColor(GetMenuItem(), SELECTED); 195 return GetFGColor("menu menuitem label", GTK_STATE_FLAG_SELECTED);
162 case kColorId_FocusedMenuItemBackgroundColor:
163 return GetBGColor(GetMenuItem(), SELECTED);
164
165 case kColorId_EnabledMenuItemForegroundColor:
166 return GetTextColor(GetMenuItem(), NORMAL);
167 case kColorId_DisabledMenuItemForegroundColor: 196 case kColorId_DisabledMenuItemForegroundColor:
168 return GetTextColor(GetMenuItem(), INSENSITIVE); 197 return GetFGColor("menu menuitem label", GTK_STATE_FLAG_INSENSITIVE);
198 case kColorId_MenuSeparatorColor:
199 // MenuButton borders are used the same way as menu separtors in Chrome.
200 case kColorId_EnabledMenuButtonBorderColor:
169 case kColorId_FocusedMenuButtonBorderColor: 201 case kColorId_FocusedMenuButtonBorderColor:
170 return GetBGColor(GetEntry(), NORMAL);
171 case kColorId_HoverMenuButtonBorderColor: 202 case kColorId_HoverMenuButtonBorderColor:
172 return GetTextAAColor(GetEntry(), PRELIGHT); 203 return GetFGColor("menu menuitem.separator", GTK_STATE_FLAG_INSENSITIVE);
173 case kColorId_MenuBorderColor:
174 case kColorId_EnabledMenuButtonBorderColor:
175 case kColorId_MenuSeparatorColor: {
176 return GetTextColor(GetMenuItem(), INSENSITIVE);
177 }
178 case kColorId_MenuBackgroundColor:
179 return GetBGColor(GetMenu(), NORMAL);
180 204
181 // Label 205 // Label
182 case kColorId_LabelEnabledColor: 206 case kColorId_LabelEnabledColor:
183 return GetTextColor(GetEntry(), NORMAL); 207 return GetFGColor(GetEntry(), NORMAL);
184 case kColorId_LabelDisabledColor: 208 case kColorId_LabelDisabledColor:
185 return GetTextColor(GetLabel(), INSENSITIVE); 209 return GetFGColor(GetLabel(), INSENSITIVE);
186 case kColorId_LabelTextSelectionColor: 210 case kColorId_LabelTextSelectionColor:
187 return GetTextColor(GetLabel(), SELECTED); 211 return GetFGColor(GetLabel(), SELECTED);
188 case kColorId_LabelTextSelectionBackgroundFocused: 212 case kColorId_LabelTextSelectionBackgroundFocused:
189 return GetBaseColor(GetLabel(), SELECTED); 213 return GetBGColor(GetLabel(), SELECTED);
190 214
191 // Link 215 // Link
192 case kColorId_LinkDisabled: 216 case kColorId_LinkDisabled:
193 return SkColorSetA(GetSystemColor(kColorId_LinkEnabled), 0xBB); 217 return SkColorSetA(GetSystemColor(kColorId_LinkEnabled), 0xBB);
194 case kColorId_LinkEnabled: { 218 case kColorId_LinkEnabled: {
195 SkColor link_color = SK_ColorTRANSPARENT; 219 SkColor link_color = SK_ColorTRANSPARENT;
196 GdkColor* style_color = nullptr; 220 GdkColor* style_color = nullptr;
197 gtk_widget_style_get(GetWindow(), "link-color", &style_color, nullptr); 221 gtk_widget_style_get(GetWindow(), "link-color", &style_color, nullptr);
198 if (style_color) { 222 if (style_color) {
199 link_color = GdkColorToSkColor(*style_color); 223 link_color = GdkColorToSkColor(*style_color);
200 gdk_color_free(style_color); 224 gdk_color_free(style_color);
201 } 225 }
202 if (link_color != SK_ColorTRANSPARENT) 226 if (link_color != SK_ColorTRANSPARENT)
203 return link_color; 227 return link_color;
204 // Default color comes from gtklinkbutton.c. 228 // Default color comes from gtklinkbutton.c.
205 return SkColorSetRGB(0x00, 0x00, 0xEE); 229 return SkColorSetRGB(0x00, 0x00, 0xEE);
206 } 230 }
207 case kColorId_LinkPressed: 231 case kColorId_LinkPressed:
208 return SK_ColorRED; 232 return SK_ColorRED;
209 233
210 // Button 234 // Button
211 case kColorId_ButtonEnabledColor: 235 case kColorId_ButtonEnabledColor:
212 return GetTextColor(GetButton(), NORMAL); 236 return GetFGColor(GetButton(), NORMAL);
213 case kColorId_BlueButtonEnabledColor: 237 case kColorId_BlueButtonEnabledColor:
214 return GetTextColor(GetBlueButton(), NORMAL); 238 return GetFGColor(GetBlueButton(), NORMAL);
215 case kColorId_ButtonDisabledColor: 239 case kColorId_ButtonDisabledColor:
216 return GetTextColor(GetButton(), INSENSITIVE); 240 return GetFGColor(GetButton(), INSENSITIVE);
217 case kColorId_BlueButtonDisabledColor: 241 case kColorId_BlueButtonDisabledColor:
218 return GetTextColor(GetBlueButton(), INSENSITIVE); 242 return GetFGColor(GetBlueButton(), INSENSITIVE);
219 case kColorId_ButtonHoverColor: 243 case kColorId_ButtonHoverColor:
220 return GetTextColor(GetButton(), PRELIGHT); 244 return GetFGColor(GetButton(), PRELIGHT);
221 case kColorId_BlueButtonHoverColor: 245 case kColorId_BlueButtonHoverColor:
222 return GetTextColor(GetBlueButton(), PRELIGHT); 246 return GetFGColor(GetBlueButton(), PRELIGHT);
223 case kColorId_BlueButtonPressedColor: 247 case kColorId_BlueButtonPressedColor:
224 return GetTextColor(GetBlueButton(), ACTIVE); 248 return GetFGColor(GetBlueButton(), ACTIVE);
225 case kColorId_BlueButtonShadowColor: 249 case kColorId_BlueButtonShadowColor:
226 return SK_ColorTRANSPARENT; 250 return SK_ColorTRANSPARENT;
227 case kColorId_ProminentButtonColor: 251 case kColorId_ProminentButtonColor:
228 return GetSystemColor(kColorId_LinkEnabled); 252 return GetSystemColor(kColorId_LinkEnabled);
229 case kColorId_TextOnProminentButtonColor: 253 case kColorId_TextOnProminentButtonColor:
230 return GetTextColor(GetLabel(), SELECTED); 254 return GetFGColor(GetLabel(), SELECTED);
231 case kColorId_ButtonPressedShade: 255 case kColorId_ButtonPressedShade:
232 return SK_ColorTRANSPARENT; 256 return SK_ColorTRANSPARENT;
233 257
234 // Textfield 258 // Textfield
235 case kColorId_TextfieldDefaultColor: 259 case kColorId_TextfieldDefaultColor:
236 return GetTextColor(GetEntry(), NORMAL); 260 return GetFGColor(GetEntry(), NORMAL);
237 case kColorId_TextfieldDefaultBackground: 261 case kColorId_TextfieldDefaultBackground:
238 return GetBaseColor(GetEntry(), NORMAL); 262 return GetBGColor(GetEntry(), NORMAL);
239 263
240 case kColorId_TextfieldReadOnlyColor: 264 case kColorId_TextfieldReadOnlyColor:
241 return GetTextColor(GetEntry(), SELECTED); 265 return GetFGColor(GetEntry(), SELECTED);
242 case kColorId_TextfieldReadOnlyBackground: 266 case kColorId_TextfieldReadOnlyBackground:
243 return GetBaseColor(GetEntry(), SELECTED); 267 return GetBGColor(GetEntry(), SELECTED);
244 case kColorId_TextfieldSelectionColor: 268 case kColorId_TextfieldSelectionColor:
245 return GetTextColor(GetLabel(), SELECTED); 269 return GetFGColor(GetLabel(), SELECTED);
246 case kColorId_TextfieldSelectionBackgroundFocused: 270 case kColorId_TextfieldSelectionBackgroundFocused:
247 return GetBaseColor(GetLabel(), SELECTED); 271 return GetBGColor(GetLabel(), SELECTED);
248 272
249 // Tooltips 273 // Tooltips
250 case kColorId_TooltipBackground: 274 case kColorId_TooltipBackground:
251 return GetBGColor(GetTooltip(), NORMAL); 275 return GetBGColor(GetTooltip(), NORMAL);
252 case kColorId_TooltipText: 276 case kColorId_TooltipText:
253 return GetFGColor(GetTooltip(), NORMAL); 277 return GetFGColor(GetTooltip(), NORMAL);
254 278
255 // Trees and Tables (implemented on GTK using the same class) 279 // Trees and Tables (implemented on GTK using the same class)
256 case kColorId_TableBackground: 280 case kColorId_TableBackground:
257 case kColorId_TreeBackground: 281 case kColorId_TreeBackground:
258 return GetBGColor(GetTree(), NORMAL); 282 return GetBGColor(GetTree(), NORMAL);
259 case kColorId_TableText: 283 case kColorId_TableText:
260 case kColorId_TreeText: 284 case kColorId_TreeText:
261 return GetTextColor(GetTree(), NORMAL); 285 return GetFGColor(GetTree(), NORMAL);
262 case kColorId_TableSelectedText: 286 case kColorId_TableSelectedText:
263 case kColorId_TableSelectedTextUnfocused: 287 case kColorId_TableSelectedTextUnfocused:
264 case kColorId_TreeSelectedText: 288 case kColorId_TreeSelectedText:
265 case kColorId_TreeSelectedTextUnfocused: 289 case kColorId_TreeSelectedTextUnfocused:
266 return GetTextColor(GetTree(), SELECTED); 290 return GetFGColor(GetTree(), SELECTED);
267 case kColorId_TableSelectionBackgroundFocused: 291 case kColorId_TableSelectionBackgroundFocused:
268 case kColorId_TableSelectionBackgroundUnfocused: 292 case kColorId_TableSelectionBackgroundUnfocused:
269 case kColorId_TreeSelectionBackgroundFocused: 293 case kColorId_TreeSelectionBackgroundFocused:
270 case kColorId_TreeSelectionBackgroundUnfocused: 294 case kColorId_TreeSelectionBackgroundUnfocused:
271 return GetBGColor(GetTree(), SELECTED); 295 return GetBGColor(GetTree(), SELECTED);
272 case kColorId_TreeArrow: 296 case kColorId_TreeArrow:
273 return GetFGColor(GetTree(), NORMAL); 297 return GetFGColor(GetTree(), NORMAL);
274 case kColorId_TableGroupingIndicatorColor: 298 case kColorId_TableGroupingIndicatorColor:
275 return GetTextAAColor(GetTree(), NORMAL); 299 return GetFGColor(GetTree(), NORMAL);
276 300
277 // Results Table 301 // Results Table
278 case kColorId_ResultsTableNormalBackground: 302 case kColorId_ResultsTableNormalBackground:
279 return GetSystemColor(kColorId_TextfieldDefaultBackground); 303 return GetSystemColor(kColorId_TextfieldDefaultBackground);
280 case kColorId_ResultsTableHoveredBackground: 304 case kColorId_ResultsTableHoveredBackground:
281 return color_utils::AlphaBlend( 305 return color_utils::AlphaBlend(
282 GetSystemColor(kColorId_TextfieldDefaultBackground), 306 GetSystemColor(kColorId_TextfieldDefaultBackground),
283 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused), 0x80); 307 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused), 0x80);
284 case kColorId_ResultsTableSelectedBackground: 308 case kColorId_ResultsTableSelectedBackground:
285 return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused); 309 return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused);
(...skipping 13 matching lines...) Expand all
299 GetSystemColor(kColorId_TextfieldDefaultBackground), 0x80); 323 GetSystemColor(kColorId_TextfieldDefaultBackground), 0x80);
300 case kColorId_ResultsTableNormalUrl: 324 case kColorId_ResultsTableNormalUrl:
301 case kColorId_ResultsTableHoveredUrl: 325 case kColorId_ResultsTableHoveredUrl:
302 return NormalURLColor(GetSystemColor(kColorId_TextfieldDefaultColor)); 326 return NormalURLColor(GetSystemColor(kColorId_TextfieldDefaultColor));
303 327
304 case kColorId_ResultsTableSelectedUrl: 328 case kColorId_ResultsTableSelectedUrl:
305 return SelectedURLColor( 329 return SelectedURLColor(
306 GetSystemColor(kColorId_TextfieldSelectionColor), 330 GetSystemColor(kColorId_TextfieldSelectionColor),
307 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused)); 331 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused));
308 332
309 case kColorId_ResultsTablePositiveText: { 333 case kColorId_ResultsTablePositiveText:
310 return color_utils::GetReadableColor(kPositiveTextColor, 334 return color_utils::GetReadableColor(kPositiveTextColor,
311 GetBaseColor(GetEntry(), NORMAL)); 335 GetBGColor(GetEntry(), NORMAL));
312 } 336 case kColorId_ResultsTablePositiveHoveredText:
313 case kColorId_ResultsTablePositiveHoveredText: {
314 return color_utils::GetReadableColor(kPositiveTextColor, 337 return color_utils::GetReadableColor(kPositiveTextColor,
315 GetBaseColor(GetEntry(), PRELIGHT)); 338 GetBGColor(GetEntry(), PRELIGHT));
316 } 339 case kColorId_ResultsTablePositiveSelectedText:
317 case kColorId_ResultsTablePositiveSelectedText: {
318 return color_utils::GetReadableColor(kPositiveTextColor, 340 return color_utils::GetReadableColor(kPositiveTextColor,
319 GetBaseColor(GetEntry(), SELECTED)); 341 GetBGColor(GetEntry(), SELECTED));
320 } 342 case kColorId_ResultsTableNegativeText:
321 case kColorId_ResultsTableNegativeText: {
322 return color_utils::GetReadableColor(kNegativeTextColor, 343 return color_utils::GetReadableColor(kNegativeTextColor,
323 GetBaseColor(GetEntry(), NORMAL)); 344 GetBGColor(GetEntry(), NORMAL));
324 } 345 case kColorId_ResultsTableNegativeHoveredText:
325 case kColorId_ResultsTableNegativeHoveredText: {
326 return color_utils::GetReadableColor(kNegativeTextColor, 346 return color_utils::GetReadableColor(kNegativeTextColor,
327 GetBaseColor(GetEntry(), PRELIGHT)); 347 GetBGColor(GetEntry(), PRELIGHT));
328 } 348 case kColorId_ResultsTableNegativeSelectedText:
329 case kColorId_ResultsTableNegativeSelectedText: {
330 return color_utils::GetReadableColor(kNegativeTextColor, 349 return color_utils::GetReadableColor(kNegativeTextColor,
331 GetBaseColor(GetEntry(), SELECTED)); 350 GetBGColor(GetEntry(), SELECTED));
332 }
333 351
334 // Throbber 352 // Throbber
335 case kColorId_ThrobberSpinningColor: 353 case kColorId_ThrobberSpinningColor:
336 case kColorId_ThrobberLightColor: 354 case kColorId_ThrobberLightColor:
337 return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused); 355 return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused);
338 356
339 case kColorId_ThrobberWaitingColor: 357 case kColorId_ThrobberWaitingColor:
340 return color_utils::AlphaBlend( 358 return color_utils::AlphaBlend(
341 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused), 359 GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused),
342 GetBGColor(GetWindow(), NORMAL), 0x80); 360 GetBGColor(GetWindow(), NORMAL), 0x80);
343 361
344 // Alert icons 362 // Alert icons
345 // Just fall back to the same colors as Aura. 363 // Just fall back to the same colors as Aura.
346 case kColorId_AlertSeverityLow: 364 case kColorId_AlertSeverityLow:
347 case kColorId_AlertSeverityMedium: 365 case kColorId_AlertSeverityMedium:
348 case kColorId_AlertSeverityHigh: { 366 case kColorId_AlertSeverityHigh:
349 ui::NativeTheme* fallback_theme = 367 return SK_ColorTRANSPARENT;
350 color_utils::IsDark(GetTextColor(GetEntry(), NORMAL))
351 ? ui::NativeTheme::GetInstanceForNativeUi()
352 : ui::NativeThemeDarkAura::instance();
353 return fallback_theme->GetSystemColor(color_id);
354 }
355 368
356 case kColorId_NumColors: 369 case kColorId_NumColors:
357 NOTREACHED(); 370 NOTREACHED();
358 break; 371 break;
359 } 372 }
360 373
361 return kInvalidColorIdColor; 374 return kInvalidColorIdColor;
362 } 375 }
363 376
377 SkColor NativeThemeGtk3::GetSystemColor(ColorId color_id) const {
378 SkColor color = LookupGtkThemeColor(color_id);
379 if (SkColorGetA(color))
380 return color;
381 gboolean prefer_dark_theme = FALSE;
382 g_object_get(gtk_settings_get_default(), "gtk-application-prefer-dark-theme",
383 &prefer_dark_theme, nullptr);
384 ui::NativeTheme* fallback_theme =
385 prefer_dark_theme ? ui::NativeThemeDarkAura::instance()
386 : ui::NativeTheme::GetInstanceForNativeUi();
387 return fallback_theme->GetSystemColor(color_id);
388 }
389
364 void NativeThemeGtk3::PaintMenuPopupBackground( 390 void NativeThemeGtk3::PaintMenuPopupBackground(
365 SkCanvas* canvas, 391 SkCanvas* canvas,
366 const gfx::Size& size, 392 const gfx::Size& size,
367 const MenuBackgroundExtraParams& menu_background) const { 393 const MenuBackgroundExtraParams& menu_background) const {
368 PaintWidget(canvas, gfx::Rect(size), "menu", GTK_STATE_FLAG_NORMAL); 394 PaintWidget(canvas, gfx::Rect(size), "menu", GTK_STATE_FLAG_NORMAL);
369 } 395 }
370 396
371 void NativeThemeGtk3::PaintMenuItemBackground( 397 void NativeThemeGtk3::PaintMenuItemBackground(
372 SkCanvas* canvas, 398 SkCanvas* canvas,
373 State state, 399 State state,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 492
467 if (!fake_menu_item) { 493 if (!fake_menu_item) {
468 fake_menu_item = gtk_custom_menu_item_new(); 494 fake_menu_item = gtk_custom_menu_item_new();
469 gtk_menu_shell_append(GTK_MENU_SHELL(GetMenu()), fake_menu_item); 495 gtk_menu_shell_append(GTK_MENU_SHELL(GetMenu()), fake_menu_item);
470 } 496 }
471 497
472 return fake_menu_item; 498 return fake_menu_item;
473 } 499 }
474 500
475 } // namespace libgtkui 501 } // namespace libgtkui
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtkui/native_theme_gtk3.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698