diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-04-15 21:16:09 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-04-15 21:16:09 -0400 |
commit | 6078c545af9ba3c5dd04479610291caf5fb6e9ca (patch) | |
tree | b512deff7fa94be793919ef5c12391ebee18d032 | |
parent | e78572f59251ffd35ac60708cea544f79eb6e2f2 (diff) | |
download | gtk+-fix-current-color.tar.gz |
Try to make late resolution of currentcolor workfix-current-color
-rw-r--r-- | gtk/gskpango.c | 13 | ||||
-rw-r--r-- | gtk/gtkcsscolorvalue.c | 37 | ||||
-rw-r--r-- | gtk/gtkcsscolorvalueprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtkcssimagefallback.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssimagelinear.c | 4 | ||||
-rw-r--r-- | gtk/gtkcssimageradial.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssimagerecolor.c | 2 | ||||
-rw-r--r-- | gtk/gtkcsspalettevalue.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssshadowvalue.c | 14 | ||||
-rw-r--r-- | gtk/gtkcssstaticstyle.c | 34 | ||||
-rw-r--r-- | gtk/gtkcssstyle.c | 22 | ||||
-rw-r--r-- | gtk/gtkcssstyleprivate.h | 16 | ||||
-rw-r--r-- | gtk/gtkflowbox.c | 2 | ||||
-rw-r--r-- | gtk/gtkicontheme.c | 2 | ||||
-rw-r--r-- | gtk/gtklabel.c | 2 | ||||
-rw-r--r-- | gtk/gtkpopover.c | 3 | ||||
-rw-r--r-- | gtk/gtkrender.c | 2 | ||||
-rw-r--r-- | gtk/gtkrenderbackground.c | 2 | ||||
-rw-r--r-- | gtk/gtkrenderborder.c | 10 | ||||
-rw-r--r-- | gtk/gtksnapshot.c | 2 | ||||
-rw-r--r-- | gtk/gtkstylecontext.c | 13 | ||||
-rw-r--r-- | gtk/gtktextlayout.c | 3 | ||||
-rw-r--r-- | gtk/gtktextutil.c | 6 | ||||
-rw-r--r-- | gtk/gtktextview.c | 5 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 10 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 4 |
26 files changed, 112 insertions, 106 deletions
diff --git a/gtk/gskpango.c b/gtk/gskpango.c index 5d2eb3c527..646c7f926d 100644 --- a/gtk/gskpango.c +++ b/gtk/gskpango.c @@ -364,20 +364,21 @@ gsk_pango_renderer_prepare_run (PangoRenderer *renderer, GTK_IS_TEXT_VIEW (crenderer->widget)) { GtkCssNode *node; - GtkCssValue *value; + GtkCssStyle *style; node = gtk_text_view_get_selection_node ((GtkTextView *)crenderer->widget); - value = gtk_css_node_get_style (node)->core->color; - fg_rgba = gtk_css_color_value_get_rgba (value); + style = gtk_css_node_get_style (node); + fg_rgba = gtk_css_color_value_get_rgba (style->core->color, NULL); } else if (crenderer->state == GSK_PANGO_RENDERER_CURSOR && gtk_widget_has_focus (crenderer->widget)) { GtkCssNode *node; - GtkCssValue *value; + GtkCssStyle *style; node = gtk_widget_get_css_node (crenderer->widget); - value = gtk_css_node_get_style (node)->background->background_color; - fg_rgba = gtk_css_color_value_get_rgba (value); + style = gtk_css_node_get_style (node); + fg_rgba = gtk_css_color_value_get_rgba (style->background->background_color, + style->core->color); } else fg_rgba = appearance->fg_rgba; diff --git a/gtk/gtkcsscolorvalue.c b/gtk/gtkcsscolorvalue.c index cd80e2db2f..a4f27bd146 100644 --- a/gtk/gtkcsscolorvalue.c +++ b/gtk/gtkcsscolorvalue.c @@ -156,6 +156,10 @@ gtk_css_value_color_compute (GtkCssValue *value, current, NULL); } + else if (value->type == COLOR_TYPE_CURRENT_COLOR) + { + resolved = _gtk_css_value_ref (value); + } else if (value->type == COLOR_TYPE_LITERAL) { resolved = _gtk_css_value_ref (value); @@ -388,7 +392,7 @@ _gtk_css_color_value_resolve (GtkCssValue *color, val = _gtk_css_color_value_resolve (color->sym_col.shade.color, provider, current, cycle_list); if (val == NULL) return NULL; - c = gtk_css_color_value_get_rgba (val); + c = gtk_css_color_value_get_rgba (val, current); apply_shade (c, &shade, color->sym_col.shade.factor); @@ -406,7 +410,7 @@ _gtk_css_color_value_resolve (GtkCssValue *color, val = _gtk_css_color_value_resolve (color->sym_col.alpha.color, provider, current, cycle_list); if (val == NULL) return NULL; - c = gtk_css_color_value_get_rgba (val); + c = gtk_css_color_value_get_rgba (val, current); apply_alpha (c, &alpha, color->sym_col.alpha.factor); @@ -424,12 +428,12 @@ _gtk_css_color_value_resolve (GtkCssValue *color, val1 = _gtk_css_color_value_resolve (color->sym_col.mix.color1, provider, current, cycle_list); if (val1 == NULL) return NULL; - color1 = gtk_css_color_value_get_rgba (val1); + color1 = gtk_css_color_value_get_rgba (val1, current); val2 = _gtk_css_color_value_resolve (color->sym_col.mix.color2, provider, current, cycle_list); if (val2 == NULL) return NULL; - color2 = gtk_css_color_value_get_rgba (val2); + color2 = gtk_css_color_value_get_rgba (val2, current); apply_mix (color1, color2, &res, color->sym_col.mix.factor); @@ -781,11 +785,32 @@ _gtk_css_color_value_parse (GtkCssParser *parser) return NULL; } -const GdkRGBA * -gtk_css_color_value_get_rgba (const GtkCssValue *color) +static inline const GdkRGBA * +get_rgba (const GtkCssValue *color) { g_assert (color->class == >K_CSS_VALUE_COLOR); g_assert (color->type == COLOR_TYPE_LITERAL); return &color->sym_col.rgba; } + +static GdkRGBA fallback; + +const GdkRGBA * +gtk_css_color_value_get_rgba (const GtkCssValue *value, + const GtkCssValue *color) +{ + if (value->type == COLOR_TYPE_CURRENT_COLOR) + { + if (color) + return get_rgba (color); + else + { + fallback = GDK_RGBA("FF69B4"); + return &fallback; + } + } + else + return get_rgba (value); + +} diff --git a/gtk/gtkcsscolorvalueprivate.h b/gtk/gtkcsscolorvalueprivate.h index 15c6a0055e..8fd93614f7 100644 --- a/gtk/gtkcsscolorvalueprivate.h +++ b/gtk/gtkcsscolorvalueprivate.h @@ -44,8 +44,8 @@ GtkCssValue * _gtk_css_color_value_resolve (GtkCssValue *color GtkStyleProvider *provider, GtkCssValue *current, GSList *cycle_list); -const GdkRGBA * gtk_css_color_value_get_rgba (const GtkCssValue *color) G_GNUC_CONST; - +const GdkRGBA * gtk_css_color_value_get_rgba (const GtkCssValue *value, + const GtkCssValue *color) G_GNUC_CONST; G_END_DECLS diff --git a/gtk/gtkcssimagefallback.c b/gtk/gtkcssimagefallback.c index c6549c6bd4..258f82c3a3 100644 --- a/gtk/gtkcssimagefallback.c +++ b/gtk/gtkcssimagefallback.c @@ -72,7 +72,7 @@ gtk_css_image_fallback_snapshot (GtkCssImage *image, { if (fallback->color) { - const GdkRGBA *color = gtk_css_color_value_get_rgba (fallback->color); + const GdkRGBA *color = gtk_css_color_value_get_rgba (fallback->color, NULL); if (!gdk_rgba_is_clear (color)) gtk_snapshot_append_color (snapshot, color, &GRAPHENE_RECT_INIT (0, 0, width, height)); diff --git a/gtk/gtkcssimagelinear.c b/gtk/gtkcssimagelinear.c index 13f848d945..742c2c9bcc 100644 --- a/gtk/gtkcssimagelinear.c +++ b/gtk/gtkcssimagelinear.c @@ -193,7 +193,7 @@ gtk_css_image_linear_snapshot (GtkCssImage *image, const GtkCssImageLinearColorStop *stop = &linear->color_stops[linear->n_stops - 1]; gtk_snapshot_append_color (snapshot, - gtk_css_color_value_get_rgba (stop->color), + gtk_css_color_value_get_rgba (stop->color, NULL), &GRAPHENE_RECT_INIT (0, 0, width, height)); return; } @@ -237,7 +237,7 @@ gtk_css_image_linear_snapshot (GtkCssImage *image, offset += step; stops[last].offset = (offset - start) / (end - start); - stops[last].color = *gtk_css_color_value_get_rgba (stop->color); + stops[last].color = *gtk_css_color_value_get_rgba (stop->color, NULL); } offset = pos; diff --git a/gtk/gtkcssimageradial.c b/gtk/gtkcssimageradial.c index 46e6da1584..de893194e7 100644 --- a/gtk/gtkcssimageradial.c +++ b/gtk/gtkcssimageradial.c @@ -206,7 +206,7 @@ gtk_css_image_radial_snapshot (GtkCssImage *image, stop = &radial->color_stops[last]; - rgba = gtk_css_color_value_get_rgba (stop->color); + rgba = gtk_css_color_value_get_rgba (stop->color, NULL); offset += step; cairo_pattern_add_color_stop_rgba (pattern, diff --git a/gtk/gtkcssimagerecolor.c b/gtk/gtkcssimagerecolor.c index 23cbb16bbe..aa0e70758f 100644 --- a/gtk/gtkcssimagerecolor.c +++ b/gtk/gtkcssimagerecolor.c @@ -72,7 +72,7 @@ lookup_symbolic_colors (GtkCssStyle *style, { const GdkRGBA *lookup; - *color_out = *gtk_css_color_value_get_rgba (style->core->color); + *color_out = *gtk_css_color_value_get_rgba (style->core->color, NULL); lookup = gtk_css_palette_value_get_color (palette, "success"); if (lookup) diff --git a/gtk/gtkcsspalettevalue.c b/gtk/gtkcsspalettevalue.c index 8245be9123..aaeb426673 100644 --- a/gtk/gtkcsspalettevalue.c +++ b/gtk/gtkcsspalettevalue.c @@ -351,7 +351,7 @@ gtk_css_palette_value_get_color (GtkCssValue *value, for (i = 0; i < value->n_colors; i ++) { if (strcmp (value->color_names[i], name) == 0) - return gtk_css_color_value_get_rgba (value->color_values[i]); + return gtk_css_color_value_get_rgba (value->color_values[i], NULL); } return NULL; diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index 9a0917ef94..ccb547a104 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -544,12 +544,12 @@ gtk_css_shadow_value_snapshot_outset (const GtkCssValue *value, continue; /* We don't need to draw invisible shadows */ - if (gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color))) + if (gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color, NULL))) continue; gtk_snapshot_append_outset_shadow (snapshot, border_box, - gtk_css_color_value_get_rgba (shadow->color), + gtk_css_color_value_get_rgba (shadow->color, NULL), _gtk_css_number_value_get (shadow->hoffset, 0), _gtk_css_number_value_get (shadow->voffset, 0), _gtk_css_number_value_get (shadow->spread, 0), @@ -576,14 +576,14 @@ gtk_css_shadow_value_snapshot_inset (const GtkCssValue *value, continue; /* We don't need to draw invisible shadows */ - if (gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color))) + if (gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color, NULL))) continue; dx = _gtk_css_number_value_get (shadow->hoffset, 0); dy = _gtk_css_number_value_get (shadow->voffset, 0); spread = _gtk_css_number_value_get (shadow->spread, 0); radius = _gtk_css_number_value_get (shadow->radius, 0); - color = gtk_css_color_value_get_rgba (shadow->color); + color = gtk_css_color_value_get_rgba (shadow->color, NULL); /* These are trivial to do with a color node */ if (spread == 0 && radius == 0 && @@ -659,7 +659,7 @@ gtk_css_shadow_value_is_clear (const GtkCssValue *value) { const ShadowValue *shadow = &value->shadows[i]; - if (!gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color))) + if (!gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color, NULL))) return FALSE; } @@ -684,7 +684,7 @@ gtk_css_shadow_value_push_snapshot (const GtkCssValue *value, { const ShadowValue *shadow = &value->shadows[i]; - if (!gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color))) + if (!gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color, NULL))) { need_shadow = TRUE; break; @@ -701,7 +701,7 @@ gtk_css_shadow_value_push_snapshot (const GtkCssValue *value, shadows[i].dx = _gtk_css_number_value_get (shadow->hoffset, 0); shadows[i].dy = _gtk_css_number_value_get (shadow->voffset, 0); - shadows[i].color = *gtk_css_color_value_get_rgba (shadow->color); + shadows[i].color = *gtk_css_color_value_get_rgba (shadow->color, NULL); shadows[i].radius = _gtk_css_number_value_get (shadow->radius, 0); } diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c index bd77af01f4..55d34d84cc 100644 --- a/gtk/gtkcssstaticstyle.c +++ b/gtk/gtkcssstaticstyle.c @@ -757,10 +757,10 @@ gtk_css_border_create_initial_values (void) values->border_top_right_radius = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_TOP_RIGHT_RADIUS, NULL, NULL, NULL); values->border_bottom_left_radius = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_BOTTOM_LEFT_RADIUS, NULL, NULL, NULL); values->border_bottom_right_radius = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS, NULL, NULL, NULL); - values->border_top_color = NULL; - values->border_right_color = NULL; - values->border_bottom_color = NULL; - values->border_left_color = NULL; + values->border_top_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_TOP_COLOR, NULL, NULL, NULL); + values->border_right_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR, NULL, NULL, NULL); + values->border_bottom_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR, NULL, NULL, NULL); + values->border_left_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_LEFT_COLOR, NULL, NULL, NULL); values->border_image_source = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_IMAGE_SOURCE, NULL, NULL, NULL); values->border_image_repeat = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_IMAGE_REPEAT, NULL, NULL, NULL); values->border_image_slice = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_IMAGE_SLICE, NULL, NULL, NULL); @@ -779,7 +779,7 @@ gtk_css_outline_create_initial_values (void) values->outline_style = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_OUTLINE_STYLE, NULL, NULL, NULL); values->outline_width = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_OUTLINE_WIDTH, NULL, NULL, NULL); values->outline_offset = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_OUTLINE_OFFSET, NULL, NULL, NULL); - values->outline_color = NULL; + values->outline_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_OUTLINE_COLOR, NULL, NULL, NULL); return (GtkCssValues *)values; } @@ -804,7 +804,7 @@ gtk_css_font_variant_create_initial_values (void) values = (GtkCssFontVariantValues *)gtk_css_values_new (GTK_CSS_FONT_VARIANT_INITIAL_VALUES); values->text_decoration_line = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_TEXT_DECORATION_LINE, NULL, NULL, NULL); - values->text_decoration_color = NULL; + values->text_decoration_color = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR, NULL, NULL, NULL); values->text_decoration_style = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE, NULL, NULL, NULL); values->font_kerning = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_FONT_KERNING, NULL, NULL, NULL); values->font_variant_ligatures = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_FONT_VARIANT_LIGATURES, NULL, NULL, NULL); @@ -1085,27 +1085,7 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style, } else { - /* We store currentcolor as NULL in the values structs, - * this gets resolved to the value of color in the style - * using the values struct - it needs to be resolved late - * since values structs are shared between styles. - */ - switch (id) - { - case GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR: - case GTK_CSS_PROPERTY_BORDER_TOP_COLOR: - case GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR: - case GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR: - case GTK_CSS_PROPERTY_BORDER_LEFT_COLOR: - case GTK_CSS_PROPERTY_OUTLINE_COLOR: - case GTK_CSS_PROPERTY_CARET_COLOR: - case GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR: - value = NULL; - break; - default: - value = _gtk_css_initial_value_new_compute (id, provider, (GtkCssStyle *)style, parent_style); - break; - } + value = _gtk_css_initial_value_new_compute (id, provider, (GtkCssStyle *)style, parent_style); } gtk_css_static_style_set_value (style, id, value, section); diff --git a/gtk/gtkcssstyle.c b/gtk/gtkcssstyle.c index d303fdecdd..74566c0c4f 100644 --- a/gtk/gtkcssstyle.c +++ b/gtk/gtkcssstyle.c @@ -122,7 +122,7 @@ gtk_css_style_get_value (GtkCssStyle *style, case GTK_CSS_PROPERTY_TEXT_DECORATION_LINE: return style->font_variant->text_decoration_line; case GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR: - return style->font_variant->text_decoration_color ? style->font_variant->text_decoration_color : style->core->color; + return style->font_variant->text_decoration_color; case GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE: return style->font_variant->text_decoration_style; case GTK_CSS_PROPERTY_FONT_KERNING: @@ -198,15 +198,15 @@ gtk_css_style_get_value (GtkCssStyle *style, case GTK_CSS_PROPERTY_BACKGROUND_POSITION: return style->background->background_position; case GTK_CSS_PROPERTY_BORDER_TOP_COLOR: - return style->border->border_top_color ? style->border->border_top_color : style->core->color; + return style->border->border_top_color; case GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR: - return style->border->border_right_color ? style->border->border_right_color : style->core->color; + return style->border->border_right_color; case GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR: - return style->border->border_bottom_color ? style->border->border_bottom_color : style->core->color; + return style->border->border_bottom_color; case GTK_CSS_PROPERTY_BORDER_LEFT_COLOR: - return style->border->border_left_color ? style->border->border_left_color: style->core->color; + return style->border->border_left_color; case GTK_CSS_PROPERTY_OUTLINE_COLOR: - return style->outline->outline_color ? style->outline->outline_color : style->core->color; + return style->outline->outline_color; case GTK_CSS_PROPERTY_BACKGROUND_REPEAT: return style->background->background_repeat; case GTK_CSS_PROPERTY_BACKGROUND_IMAGE: @@ -270,9 +270,9 @@ gtk_css_style_get_value (GtkCssStyle *style, case GTK_CSS_PROPERTY_FILTER: return style->other->filter; case GTK_CSS_PROPERTY_CARET_COLOR: - return style->font->caret_color ? style->font->caret_color : style->core->color; + return style->font->caret_color; case GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR: - return style->font->secondary_caret_color ? style->font->secondary_caret_color : style->core->color; + return style->font->secondary_caret_color; case GTK_CSS_PROPERTY_FONT_FEATURE_SETTINGS: return style->font->font_feature_settings; case GTK_CSS_PROPERTY_FONT_VARIATION_SETTINGS: @@ -437,10 +437,8 @@ gtk_css_style_get_pango_attributes (GtkCssStyle *style) /* text-decoration */ decoration_line = _gtk_css_text_decoration_line_value_get (style->font_variant->text_decoration_line); decoration_style = _gtk_css_text_decoration_style_value_get (style->font_variant->text_decoration_style); - color = gtk_css_color_value_get_rgba (style->core->color); - decoration_color = gtk_css_color_value_get_rgba (style->font_variant->text_decoration_color - ? style->font_variant->text_decoration_color - : style->core->color); + color = gtk_css_color_value_get_rgba (style->core->color, NULL); + decoration_color = gtk_css_color_value_get_rgba (style->font_variant->text_decoration_color, style->core->color); switch (decoration_line) { diff --git a/gtk/gtkcssstyleprivate.h b/gtk/gtkcssstyleprivate.h index 1ee874d06b..d50ddb6528 100644 --- a/gtk/gtkcssstyleprivate.h +++ b/gtk/gtkcssstyleprivate.h @@ -114,10 +114,10 @@ struct _GtkCssBorderValues { GtkCssValue *border_top_right_radius; GtkCssValue *border_bottom_right_radius; GtkCssValue *border_bottom_left_radius; - GtkCssValue *border_top_color; // NULL if currentColor - GtkCssValue *border_right_color; // NULL if currentColor - GtkCssValue *border_bottom_color; // NULL if currentColor - GtkCssValue *border_left_color; // NULL if currentColor + GtkCssValue *border_top_color; + GtkCssValue *border_right_color; + GtkCssValue *border_bottom_color; + GtkCssValue *border_left_color; GtkCssValue *border_image_source; GtkCssValue *border_image_repeat; GtkCssValue *border_image_slice; @@ -137,7 +137,7 @@ struct _GtkCssOutlineValues { GtkCssValue *outline_style; GtkCssValue *outline_width; GtkCssValue *outline_offset; - GtkCssValue *outline_color; // NULL if currentColor + GtkCssValue *outline_color; }; struct _GtkCssFontValues { @@ -148,8 +148,8 @@ struct _GtkCssFontValues { GtkCssValue *font_stretch; GtkCssValue *letter_spacing; GtkCssValue *text_shadow; - GtkCssValue *caret_color; // NULL if currentColor - GtkCssValue *secondary_caret_color; // NULL if currentColor + GtkCssValue *caret_color; + GtkCssValue *secondary_caret_color; GtkCssValue *font_feature_settings; GtkCssValue *font_variation_settings; }; @@ -157,7 +157,7 @@ struct _GtkCssFontValues { struct _GtkCssFontVariantValues { GtkCssValues base; GtkCssValue *text_decoration_line; - GtkCssValue *text_decoration_color; // NULL if currentColor + GtkCssValue *text_decoration_color; GtkCssValue *text_decoration_style; GtkCssValue *font_kerning; GtkCssValue *font_variant_ligatures; diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c index 84ba41df2f..228ec3f270 100644 --- a/gtk/gtkflowbox.c +++ b/gtk/gtkflowbox.c @@ -2380,7 +2380,7 @@ gtk_flow_box_snapshot (GtkWidget *widget, cairo_append_path (cr, path); cairo_path_destroy (path); - border_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_COLOR)); + border_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_COLOR), _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); gtk_style_context_get_border (context, &border); cairo_set_line_width (cr, border.left); diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index c8e5eaaa50..5c58be5324 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -2523,7 +2523,7 @@ gtk_icon_theme_lookup_symbolic_colors (GtkCssStyle *style, color = style->core->color; palette = style->core->icon_palette; - *color_out = *gtk_css_color_value_get_rgba (color); + *color_out = *gtk_css_color_value_get_rgba (color, NULL); lookup = gtk_css_palette_value_get_color (palette, "success"); if (lookup) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 992bc9cc69..452b57e9d6 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3045,7 +3045,7 @@ gtk_label_update_layout_attributes (GtkLabel *label) pango_attr_list_insert (attrs, attribute); style = gtk_css_node_get_style (link->cssnode); - link_color = gtk_css_color_value_get_rgba (style->core->color); + link_color = gtk_css_color_value_get_rgba (style->core->color, NULL); attribute = pango_attr_foreground_new (link_color->red * 65535, link_color->green * 65535, diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index 11dd3f273b..7023d45adf 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -1455,7 +1455,8 @@ create_arrow_render_node (GtkPopover *popover) const GdkRGBA *border_color; style = gtk_css_node_get_style (priv->arrow_node); - border_color = gtk_css_color_value_get_rgba (style->border->border_left_color ? style->border->border_left_color : style->core->color); + border_color = gtk_css_color_value_get_rgba (style->border->border_left_color, + style->core->color); gtk_popover_apply_tail_path (popover, cr); gdk_cairo_set_source_rgba (cr, border_color); diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c index c11e377aaf..45fe3088e8 100644 --- a/gtk/gtkrender.c +++ b/gtk/gtkrender.c @@ -383,7 +383,7 @@ gtk_do_render_line (GtkStyleContext *context, cairo_save (cr); - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR), NULL); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); cairo_set_line_width (cr, 1); diff --git a/gtk/gtkrenderbackground.c b/gtk/gtkrenderbackground.c index e366188852..1d93a318c9 100644 --- a/gtk/gtkrenderbackground.c +++ b/gtk/gtkrenderbackground.c @@ -273,7 +273,7 @@ gtk_css_style_snapshot_background (GtkCssBoxes *boxes, return; background_image = background->background_image; - bg_color = gtk_css_color_value_get_rgba (background->background_color); + bg_color = gtk_css_color_value_get_rgba (background->background_color, boxes->style->core->color); box_shadow = background->box_shadow; has_bg_color = !gdk_rgba_is_clear (bg_color); diff --git a/gtk/gtkrenderborder.c b/gtk/gtkrenderborder.c index a137d0814c..d734c1aad2 100644 --- a/gtk/gtkrenderborder.c +++ b/gtk/gtkrenderborder.c @@ -687,10 +687,10 @@ gtk_css_style_snapshot_border (GtkCssBoxes *boxes, gtk_css_boxes_get_padding_rect (boxes))) return; - colors[0] = *gtk_css_color_value_get_rgba (border->border_top_color ? border->border_top_color : boxes->style->core->color); - colors[1] = *gtk_css_color_value_get_rgba (border->border_right_color ? border->border_right_color : boxes->style->core->color); - colors[2] = *gtk_css_color_value_get_rgba (border->border_bottom_color ? border->border_bottom_color : boxes->style->core->color); - colors[3] = *gtk_css_color_value_get_rgba (border->border_left_color ? border->border_left_color : boxes->style->core->color); + colors[0] = *gtk_css_color_value_get_rgba (border->border_top_color, boxes->style->core->color); + colors[1] = *gtk_css_color_value_get_rgba (border->border_right_color, boxes->style->core->color); + colors[2] = *gtk_css_color_value_get_rgba (border->border_bottom_color, boxes->style->core->color); + colors[3] = *gtk_css_color_value_get_rgba (border->border_left_color, boxes->style->core->color); alpha_test_vector = graphene_simd4f_init (colors[0].alpha, colors[1].alpha, colors[2].alpha, colors[3].alpha); if (graphene_simd4f_is_zero4 (alpha_test_vector)) @@ -745,7 +745,7 @@ gtk_css_style_snapshot_outline (GtkCssBoxes *boxes, border_style[1] = border_style[2] = border_style[3] = border_style[0]; border_width[0] = _gtk_css_number_value_get (outline->outline_width, 100); border_width[3] = border_width[2] = border_width[1] = border_width[0]; - colors[0] = *gtk_css_color_value_get_rgba (outline->outline_color ? outline->outline_color : boxes->style->core->color); + colors[0] = *gtk_css_color_value_get_rgba (outline->outline_color, boxes->style->core->color); colors[3] = colors[2] = colors[1] = colors[0]; snapshot_border (snapshot, diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index a2b193685c..3a00e9350e 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -1732,7 +1732,7 @@ gtk_snapshot_render_layout (GtkSnapshot *snapshot, gtk_snapshot_save (snapshot); gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y)); - fg_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + fg_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR), NULL); shadows_value = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW); has_shadow = gtk_css_shadow_value_push_snapshot (shadows_value, snapshot); diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 15e0085537..3ac8548cf9 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -929,7 +929,7 @@ gtk_style_context_resolve_color (GtkStyleContext *context, if (val == NULL) return FALSE; - *result = *gtk_css_color_value_get_rgba (val); + *result = *gtk_css_color_value_get_rgba (val, NULL); _gtk_css_value_unref (val); return TRUE; } @@ -980,7 +980,7 @@ gtk_style_context_get_color (GtkStyleContext *context, g_return_if_fail (color != NULL); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); - *color = *gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + *color = *gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR), NULL); } /** @@ -1072,10 +1072,10 @@ _gtk_style_context_get_cursor_color (GtkStyleContext *context, style = gtk_style_context_lookup_style (context); if (primary_color) - *primary_color = *gtk_css_color_value_get_rgba (style->font->caret_color ? style->font->caret_color : style->core->color); + *primary_color = *gtk_css_color_value_get_rgba (style->font->caret_color, style->core->color); if (secondary_color) - *secondary_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color ? style->font->secondary_caret_color : style->core->color); + *secondary_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color, style->core->color); } static void @@ -1449,14 +1449,15 @@ _gtk_style_context_get_attributes (AtkAttributeSet *attributes, const GdkRGBA *color; gchar *value; - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR)); + color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); value = g_strdup_printf ("%u,%u,%u", (guint) ceil (color->red * 65536 - color->red), (guint) ceil (color->green * 65536 - color->green), (guint) ceil (color->blue * 65536 - color->blue)); attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value); - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR), NULL); value = g_strdup_printf ("%u,%u,%u", (guint) ceil (color->red * 65536 - color->red), (guint) ceil (color->green * 65536 - color->green), diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index a646151f29..bd72dad302 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -3977,7 +3977,8 @@ render_para (GskPangoRenderer *crenderer, GtkCssNode *selection_node = gtk_text_view_get_selection_node ((GtkTextView*)crenderer->widget); gtk_style_context_save_to_node (context, selection_node); - selection = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR)); + selection = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); gtk_style_context_restore (context); } diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c index 6b95684e3c..5c1e74896a 100644 --- a/gtk/gtktextutil.c +++ b/gtk/gtktextutil.c @@ -131,7 +131,7 @@ gtk_text_util_create_drag_icon (GtkWidget *widget, snapshot = gtk_snapshot_new (); style = gtk_css_node_get_style (gtk_widget_get_css_node (widget)); - color = gtk_css_color_value_get_rgba (style->core->color); + color = gtk_css_color_value_get_rgba (style->core->color, NULL); gtk_snapshot_append_layout (snapshot, layout, color); @@ -157,8 +157,8 @@ set_attributes_from_style (GtkWidget *widget, context = gtk_widget_get_style_context (widget); style = gtk_style_context_lookup_style (context); - *values->appearance.bg_rgba = *gtk_css_color_value_get_rgba (style->background->background_color); - *values->appearance.fg_rgba = *gtk_css_color_value_get_rgba (style->core->color); + *values->appearance.bg_rgba = *gtk_css_color_value_get_rgba (style->background->background_color, style->core->color); + *values->appearance.fg_rgba = *gtk_css_color_value_get_rgba (style->core->color, NULL); if (values->font) pango_font_description_free (values->font); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index c4f7266515..c2a37b6108 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -7541,9 +7541,10 @@ gtk_text_view_set_attributes_from_style (GtkTextView *text_view, context = gtk_widget_get_style_context (GTK_WIDGET (text_view)); - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR)); + color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); *values->appearance.bg_rgba = *color; - color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR), NULL); *values->appearance.fg_rgba = *color; if (values->font) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 30f97c408e..fbf44e7c03 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -4174,9 +4174,8 @@ gtk_tree_view_snapshot_grid_line (GtkTreeView *tree_view, const GdkRGBA *grid_line_color; context = gtk_widget_get_style_context (GTK_WIDGET (tree_view)); - grid_line_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, - GTK_CSS_PROPERTY_BORDER_TOP_COLOR)); - + grid_line_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); if (!gdk_rgba_equal (grid_line_color, &tree_view->grid_line_color) || (orientation == GTK_ORIENTATION_HORIZONTAL && !tree_view->horizontal_grid_line_texture) || (orientation == GTK_ORIENTATION_VERTICAL && !tree_view->vertical_grid_line_texture)) @@ -4248,9 +4247,8 @@ gtk_tree_view_snapshot_tree_line (GtkTreeView *tree_view, const GdkRGBA *tree_line_color; context = gtk_widget_get_style_context (GTK_WIDGET (tree_view)); - tree_line_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, - GTK_CSS_PROPERTY_BORDER_LEFT_COLOR)); - + tree_line_color = gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_LEFT_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); if (!gdk_rgba_equal (tree_line_color, &tree_view->tree_line_color) || (orientation == GTK_ORIENTATION_HORIZONTAL && !tree_view->horizontal_tree_line_texture) || (orientation == GTK_ORIENTATION_VERTICAL && !tree_view->vertical_tree_line_texture)) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 68ed529105..4266eca483 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -4706,8 +4706,8 @@ update_opaque_region (GtkWindow *window, context = gtk_widget_get_style_context (widget); - is_opaque = gdk_rgba_is_opaque (gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR))); - + is_opaque = gdk_rgba_is_opaque (gtk_css_color_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BACKGROUND_COLOR), + _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR))); if (gtk_widget_get_opacity (widget) < 1.0) is_opaque = FALSE; |