From 8d6c5ba90e2b232934c6a6e4441c710fef359786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Thu, 22 Aug 2019 19:25:22 +0200 Subject: [PATCH] cssstaticstyle: Compute initial/inherit values directly --- gtk/gtkcssinitialvalue.c | 14 +++++++++++++- gtk/gtkcssinitialvalueprivate.h | 4 +--- gtk/gtkcssstaticstyle.c | 17 ++++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/gtk/gtkcssinitialvalue.c b/gtk/gtkcssinitialvalue.c index db479cfabc..258d9f604d 100644 --- a/gtk/gtkcssinitialvalue.c +++ b/gtk/gtkcssinitialvalue.c @@ -37,7 +37,7 @@ gtk_css_value_initial_free (GtkCssValue *value) g_assert_not_reached (); } -GtkCssValue * +static GtkCssValue * gtk_css_value_initial_compute (GtkCssValue *value, guint property_id, GtkStyleProvider *provider, @@ -124,3 +124,15 @@ _gtk_css_initial_value_get (void) { return &initial; } +GtkCssValue * +_gtk_css_initial_value_new_compute (guint property_id, + GtkStyleProvider *provider, + GtkCssStyle *style, + GtkCssStyle *parent_style) +{ + return gtk_css_value_initial_compute (NULL, + property_id, + provider, + style, + parent_style); +} diff --git a/gtk/gtkcssinitialvalueprivate.h b/gtk/gtkcssinitialvalueprivate.h index 08e501f20f..7bec6bd5a0 100644 --- a/gtk/gtkcssinitialvalueprivate.h +++ b/gtk/gtkcssinitialvalueprivate.h @@ -26,9 +26,7 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_initial_value_new (void); GtkCssValue * _gtk_css_initial_value_get (void); - -GtkCssValue * gtk_css_value_initial_compute (GtkCssValue *value, - guint property_id, +GtkCssValue * _gtk_css_initial_value_new_compute (guint property_id, GtkStyleProvider *provider, GtkCssStyle *style, GtkCssStyle *parent_style); diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c index 840281e24e..6cb835d6e2 100644 --- a/gtk/gtkcssstaticstyle.c +++ b/gtk/gtkcssstaticstyle.c @@ -218,13 +218,20 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style, { GtkCssStyleProperty *prop = _gtk_css_style_property_lookup_by_id (id); - if (_gtk_css_style_property_is_inherit (prop)) - specified = _gtk_css_inherit_value_get (); + if (parent_style && _gtk_css_style_property_is_inherit (prop)) + { + /* Just take the style from the parent */ + value = _gtk_css_value_ref (gtk_css_style_get_value (parent_style, id)); + } else - specified = _gtk_css_initial_value_get (); + { + value = _gtk_css_initial_value_new_compute (id, provider, (GtkCssStyle *)style, parent_style); + } + } + else + { + value = _gtk_css_value_compute (specified, id, provider, (GtkCssStyle *)style, parent_style); } - - value = _gtk_css_value_compute (specified, id, provider, (GtkCssStyle *)style, parent_style); gtk_css_static_style_set_value (style, id, value, section); }