From: Benjamin Otte Date: Thu, 23 Jan 2020 01:42:01 +0000 (+0100) Subject: css: Pass node through the lookup code X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~144^2~15 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=aa7c5e96a6f863888fd09c1ca07d7c4123b9cd6c;p=gtk4.git css: Pass node through the lookup code ... instead of passing a matcher. The matcher code is now local to the CssProvider/CssSelector machinery. --- diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index 59e16e1495..1bf56b0646 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -358,8 +358,6 @@ gtk_css_node_create_style (GtkCssNode *cssnode, GtkCssChange change) { const GtkCssNodeDeclaration *decl; - GtkCssMatcher matcher; - GtkCssStyle *parent; GtkCssStyle *style; GtkCssChange style_change; @@ -371,8 +369,6 @@ gtk_css_node_create_style (GtkCssNode *cssnode, created_styles++; - parent = cssnode->parent ? cssnode->parent->style : NULL; - if (change & GTK_CSS_CHANGE_NEEDS_RECOMPUTE) { /* Need to recompute the change flags */ @@ -383,11 +379,8 @@ gtk_css_node_create_style (GtkCssNode *cssnode, style_change = gtk_css_static_style_get_change (gtk_css_style_get_static_style (cssnode->style)); } - _gtk_css_matcher_node_init (&matcher, cssnode); - style = gtk_css_static_style_new_compute (gtk_css_node_get_style_provider (cssnode), - &matcher, - parent, + cssnode, style_change); store_in_global_parent_cache (cssnode, decl, style); diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index fc17e95dd7..a98af871bc 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -449,13 +449,14 @@ gtk_css_style_provider_get_keyframes (GtkStyleProvider *provider, static void gtk_css_style_provider_lookup (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, + GtkCssNode *node, GtkCssLookup *lookup, GtkCssChange *change) { GtkCssProvider *css_provider = GTK_CSS_PROVIDER (provider); GtkCssProviderPrivate *priv = gtk_css_provider_get_instance_private (css_provider); GtkCssRuleset *ruleset; + GtkCssMatcher matcher; guint j; int i; GPtrArray *tree_rules; @@ -463,10 +464,12 @@ gtk_css_style_provider_lookup (GtkStyleProvider *provider, if (_gtk_css_selector_tree_is_empty (priv->tree)) return; - tree_rules = _gtk_css_selector_tree_match_all (priv->tree, matcher); + _gtk_css_matcher_node_init (&matcher, node); + + tree_rules = _gtk_css_selector_tree_match_all (priv->tree, &matcher); if (tree_rules) { - verify_tree_match_results (css_provider, matcher, tree_rules); + verify_tree_match_results (css_provider, &matcher, tree_rules); for (i = tree_rules->len - 1; i >= 0; i--) { @@ -497,7 +500,7 @@ gtk_css_style_provider_lookup (GtkStyleProvider *provider, } if (change) - *change = _gtk_css_selector_tree_get_change_all (priv->tree, matcher); + *change = _gtk_css_selector_tree_get_change_all (priv->tree, &matcher); } static void diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c index 0c6b8da04b..bbae7098b4 100644 --- a/gtk/gtkcssstaticstyle.c +++ b/gtk/gtkcssstaticstyle.c @@ -166,8 +166,7 @@ gtk_css_static_style_get_default (void) settings = gtk_settings_get_default (); default_style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER (settings), NULL, - NULL, - TRUE); + 0); g_object_set_data_full (G_OBJECT (settings), I_("gtk-default-style"), default_style, clear_default_style); } @@ -177,18 +176,18 @@ gtk_css_static_style_get_default (void) GtkCssStyle * gtk_css_static_style_new_compute (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, - GtkCssStyle *parent, + GtkCssNode *node, GtkCssChange change) { GtkCssStaticStyle *result; GtkCssLookup lookup; + GtkCssNode *parent; _gtk_css_lookup_init (&lookup); - if (matcher) + if (node) gtk_style_provider_lookup (provider, - matcher, + node, &lookup, change == 0 ? &change : NULL); @@ -196,10 +195,15 @@ gtk_css_static_style_new_compute (GtkStyleProvider *provider, result->change = change; + if (node) + parent = gtk_css_node_get_parent (node); + else + parent = NULL; + _gtk_css_lookup_resolve (&lookup, provider, result, - parent); + parent ? gtk_css_node_get_style (parent) : NULL); _gtk_css_lookup_destroy (&lookup); diff --git a/gtk/gtkcssstaticstyleprivate.h b/gtk/gtkcssstaticstyleprivate.h index 81c97bbdc0..1073f7bb0a 100644 --- a/gtk/gtkcssstaticstyleprivate.h +++ b/gtk/gtkcssstaticstyleprivate.h @@ -20,7 +20,6 @@ #ifndef __GTK_CSS_STATIC_STYLE_PRIVATE_H__ #define __GTK_CSS_STATIC_STYLE_PRIVATE_H__ -#include "gtk/gtkcssmatcherprivate.h" #include "gtk/gtkcssstyleprivate.h" G_BEGIN_DECLS @@ -53,8 +52,7 @@ GType gtk_css_static_style_get_type (void) G_GNUC_CO GtkCssStyle * gtk_css_static_style_get_default (void); GtkCssStyle * gtk_css_static_style_new_compute (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, - GtkCssStyle *parent, + GtkCssNode *node, GtkCssChange change); void gtk_css_static_style_compute_value (GtkCssStaticStyle *style, diff --git a/gtk/gtkstylecascade.c b/gtk/gtkstylecascade.c index ea0f128481..1bc60e12be 100644 --- a/gtk/gtkstylecascade.c +++ b/gtk/gtkstylecascade.c @@ -180,7 +180,7 @@ gtk_style_cascade_get_keyframes (GtkStyleProvider *provider, static void gtk_style_cascade_lookup (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, + GtkCssNode *node, GtkCssLookup *lookup, GtkCssChange *change) { @@ -193,7 +193,7 @@ gtk_style_cascade_lookup (GtkStyleProvider *provider, item; item = gtk_style_cascade_iter_next (cascade, &iter)) { - gtk_style_provider_lookup (item, matcher, lookup, + gtk_style_provider_lookup (item, node, lookup, change ? &iter_change : NULL); if (change) *change |= iter_change; diff --git a/gtk/gtkstyleprovider.c b/gtk/gtkstyleprovider.c index 46d5755659..6dd380b95c 100644 --- a/gtk/gtkstyleprovider.c +++ b/gtk/gtkstyleprovider.c @@ -92,15 +92,15 @@ gtk_style_provider_get_keyframes (GtkStyleProvider *provider, } void -gtk_style_provider_lookup (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, - GtkCssLookup *lookup, - GtkCssChange *out_change) +gtk_style_provider_lookup (GtkStyleProvider *provider, + GtkCssNode *node, + GtkCssLookup *lookup, + GtkCssChange *out_change) { GtkStyleProviderInterface *iface; gtk_internal_return_if_fail (GTK_IS_STYLE_PROVIDER (provider)); - gtk_internal_return_if_fail (matcher != NULL); + gtk_internal_return_if_fail (GTK_IS_CSS_NODE (node)); gtk_internal_return_if_fail (lookup != NULL); if (out_change) @@ -111,7 +111,7 @@ gtk_style_provider_lookup (GtkStyleProvider *provider, if (!iface->lookup) return; - iface->lookup (provider, matcher, lookup, out_change); + iface->lookup (provider, node, lookup, out_change); } void diff --git a/gtk/gtkstyleproviderprivate.h b/gtk/gtkstyleproviderprivate.h index c33438dd99..2cdfbed16b 100644 --- a/gtk/gtkstyleproviderprivate.h +++ b/gtk/gtkstyleproviderprivate.h @@ -21,7 +21,7 @@ #include #include "gtk/gtkcsskeyframesprivate.h" #include "gtk/gtkcsslookupprivate.h" -#include "gtk/gtkcssmatcherprivate.h" +#include "gtk/gtkcssnodeprivate.h" #include "gtk/gtkcssvalueprivate.h" #include @@ -35,37 +35,37 @@ struct _GtkStyleProviderInterface { GTypeInterface g_iface; - GtkCssValue * (* get_color) (GtkStyleProvider *provider, + GtkCssValue * (* get_color) (GtkStyleProvider *provider, const char *name); - GtkSettings * (* get_settings) (GtkStyleProvider *provider); - GtkCssKeyframes * (* get_keyframes) (GtkStyleProvider *provider, + GtkSettings * (* get_settings) (GtkStyleProvider *provider); + GtkCssKeyframes * (* get_keyframes) (GtkStyleProvider *provider, const char *name); - int (* get_scale) (GtkStyleProvider *provider); - void (* lookup) (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, + int (* get_scale) (GtkStyleProvider *provider); + void (* lookup) (GtkStyleProvider *provider, + GtkCssNode *node, GtkCssLookup *lookup, GtkCssChange *out_change); - void (* emit_error) (GtkStyleProvider *provider, + void (* emit_error) (GtkStyleProvider *provider, GtkCssSection *section, const GError *error); /* signal */ - void (* changed) (GtkStyleProvider *provider); + void (* changed) (GtkStyleProvider *provider); }; -GtkSettings * gtk_style_provider_get_settings (GtkStyleProvider *provider); -GtkCssValue * gtk_style_provider_get_color (GtkStyleProvider *provider, +GtkSettings * gtk_style_provider_get_settings (GtkStyleProvider *provider); +GtkCssValue * gtk_style_provider_get_color (GtkStyleProvider *provider, const char *name); -GtkCssKeyframes * gtk_style_provider_get_keyframes (GtkStyleProvider *provider, +GtkCssKeyframes * gtk_style_provider_get_keyframes (GtkStyleProvider *provider, const char *name); -int gtk_style_provider_get_scale (GtkStyleProvider *provider); -void gtk_style_provider_lookup (GtkStyleProvider *provider, - const GtkCssMatcher *matcher, +int gtk_style_provider_get_scale (GtkStyleProvider *provider); +void gtk_style_provider_lookup (GtkStyleProvider *provider, + GtkCssNode *node, GtkCssLookup *lookup, GtkCssChange *out_change); -void gtk_style_provider_changed (GtkStyleProvider *provider); +void gtk_style_provider_changed (GtkStyleProvider *provider); -void gtk_style_provider_emit_error (GtkStyleProvider *provider, +void gtk_style_provider_emit_error (GtkStyleProvider *provider, GtkCssSection *section, GError *error);