OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |