Chromium Code Reviews| 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 |