css: Pass node through the lookup code
... instead of passing a matcher. The matcher code is now local to the CssProvider/CssSelector machinery.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -446,13 +446,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;
|
||||
@@ -460,10 +461,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--)
|
||||
{
|
||||
@@ -494,7 +497,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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include <glib-object.h>
|
||||
#include "gtk/gtkcsskeyframesprivate.h"
|
||||
#include "gtk/gtkcsslookupprivate.h"
|
||||
#include "gtk/gtkcssmatcherprivate.h"
|
||||
#include "gtk/gtkcssnodeprivate.h"
|
||||
#include "gtk/gtkcssvalueprivate.h"
|
||||
#include <gtk/gtktypes.h>
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user