cssstaticstyle: Compute initial/inherit values directly
authorTimm Bäder <mail@baedert.org>
Thu, 22 Aug 2019 17:25:22 +0000 (19:25 +0200)
committerTimm Bäder <mail@baedert.org>
Mon, 9 Sep 2019 15:36:24 +0000 (17:36 +0200)
gtk/gtkcssinitialvalue.c
gtk/gtkcssinitialvalueprivate.h
gtk/gtkcssstaticstyle.c

index db479cfabcae90e6dd75c5a1b92f2b04fc7c8f85..258d9f604dfe00a71d078eaba739ff50443e3a02 100644 (file)
@@ -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);
+}
index 08e501f20faec8c6645e7925ab93a0b9796c495d..7bec6bd5a086c6c85582b47fad635daa8a37a0e1 100644 (file)
@@ -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);
index 840281e24e4b5c11fe4552ac9554ed334af1090f..6cb835d6e263f1d2ee4266630c4d77db2ef40e1a 100644 (file)
@@ -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);
 }