From 966a23503a2e8bbb948270e06f3eb13ca4c06632 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 2 May 2023 19:48:54 +0200 Subject: [PATCH] css: Don't transition to currentColor Transition to the color that is in use instead. Fixes crashes because currentColor is not an RGBA color and therefor could not be queried later. Fixes #5798 --- gtk/gtkcssfiltervalue.c | 16 ++++++++-------- gtk/gtkcssshadowvalue.c | 4 ++-- gtk/gtkcssshadowvalueprivate.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gtk/gtkcssfiltervalue.c b/gtk/gtkcssfiltervalue.c index ed334979cb6..84f581121c5 100644 --- a/gtk/gtkcssfiltervalue.c +++ b/gtk/gtkcssfiltervalue.c @@ -102,10 +102,10 @@ gtk_css_filter_clear (GtkCssFilter *filter) } static void -gtk_css_filter_init_identity (GtkCssFilter *filter, - GtkCssFilterType type) +gtk_css_filter_init_identity (GtkCssFilter *filter, + const GtkCssFilter *other) { - switch (type) + switch (other->type) { case GTK_CSS_FILTER_BRIGHTNESS: filter->brightness.value = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); @@ -135,7 +135,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter, filter->blur.value = _gtk_css_number_value_new (0, GTK_CSS_PX); break; case GTK_CSS_FILTER_DROP_SHADOW: - filter->drop_shadow.value = gtk_css_shadow_value_new_filter (); + filter->drop_shadow.value = gtk_css_shadow_value_new_filter (other->drop_shadow.value); break; case GTK_CSS_FILTER_NONE: default: @@ -143,7 +143,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter, break; } - filter->type = type; + filter->type = other->type; } #define R 0.2126 @@ -466,7 +466,7 @@ gtk_css_value_filter_equal (const GtkCssValue *value1, { GtkCssFilter filter; - gtk_css_filter_init_identity (&filter, larger->filters[i].type); + gtk_css_filter_init_identity (&filter, &larger->filters[i]); if (!gtk_css_filter_equal (&larger->filters[i], &filter)) { @@ -590,7 +590,7 @@ gtk_css_value_filter_transition (GtkCssValue *start, { GtkCssFilter filter; - gtk_css_filter_init_identity (&filter, start->filters[i].type); + gtk_css_filter_init_identity (&filter, &start->filters[i]); gtk_css_filter_transition (&result->filters[i], &start->filters[i], &filter, @@ -602,7 +602,7 @@ gtk_css_value_filter_transition (GtkCssValue *start, { GtkCssFilter filter; - gtk_css_filter_init_identity (&filter, end->filters[i].type); + gtk_css_filter_init_identity (&filter, &end->filters[i]); gtk_css_filter_transition (&result->filters[i], &filter, &end->filters[i], diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index 66029dbff44..fead476c00a 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -331,7 +331,7 @@ gtk_css_shadow_value_new (ShadowValue *shadows, } GtkCssValue * -gtk_css_shadow_value_new_filter (void) +gtk_css_shadow_value_new_filter (const GtkCssValue *other) { ShadowValue value; @@ -340,7 +340,7 @@ gtk_css_shadow_value_new_filter (void) value.voffset = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); value.radius = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); value.spread = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); - value.color = _gtk_css_color_value_new_current_color (); + value.color = gtk_css_value_ref (other->shadows[0].color); return gtk_css_shadow_value_new (&value, 1, TRUE); } diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h index 21efac19080..a2cf97688b0 100644 --- a/gtk/gtkcssshadowvalueprivate.h +++ b/gtk/gtkcssshadowvalueprivate.h @@ -35,7 +35,7 @@ G_BEGIN_DECLS GtkCssValue * gtk_css_shadow_value_new_none (void); -GtkCssValue * gtk_css_shadow_value_new_filter (void); +GtkCssValue * gtk_css_shadow_value_new_filter (const GtkCssValue *other); GtkCssValue * gtk_css_shadow_value_parse (GtkCssParser *parser, gboolean box_shadow_mode); -- GitLab