[gtk/fix-current-color] Try to make late resolution of currentcolor work
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/fix-current-color] Try to make late resolution of currentcolor work
- Date: Thu, 16 Apr 2020 01:17:16 +0000 (UTC)
commit 6078c545af9ba3c5dd04479610291caf5fb6e9ca
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Apr 15 21:16:09 2020 -0400
Try to make late resolution of currentcolor work
gtk/gskpango.c | 13 +++++++------
gtk/gtkcsscolorvalue.c | 37 +++++++++++++++++++++++++++++++------
gtk/gtkcsscolorvalueprivate.h | 4 ++--
gtk/gtkcssimagefallback.c | 2 +-
gtk/gtkcssimagelinear.c | 4 ++--
gtk/gtkcssimageradial.c | 2 +-
gtk/gtkcssimagerecolor.c | 2 +-
gtk/gtkcsspalettevalue.c | 2 +-
gtk/gtkcssshadowvalue.c | 14 +++++++-------
gtk/gtkcssstaticstyle.c | 34 +++++++---------------------------
gtk/gtkcssstyle.c | 22 ++++++++++------------
gtk/gtkcssstyleprivate.h | 16 ++++++++--------
gtk/gtkflowbox.c | 2 +-
gtk/gtkicontheme.c | 2 +-
gtk/gtklabel.c | 2 +-
gtk/gtkpopover.c | 3 ++-
gtk/gtkrender.c | 2 +-
gtk/gtkrenderbackground.c | 2 +-
gtk/gtkrenderborder.c | 10 +++++-----
gtk/gtksnapshot.c | 2 +-
gtk/gtkstylecontext.c | 13 +++++++------
gtk/gtktextlayout.c | 3 ++-
gtk/gtktextutil.c | 6 +++---
gtk/gtktextview.c | 5 +++--
gtk/gtktreeview.c | 10 ++++------
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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]