diff options
author | Benjamin Otte <otte@redhat.com> | 2016-03-23 06:08:57 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-04-08 16:18:31 +0200 |
commit | 7a36b5df9082834f7f8d4c08cb5b1e18b91e2b34 (patch) | |
tree | 5b78c73681bdf84db4eac18fd9c1e4a276e41d0a | |
parent | 69506210a230e0e1f92defb645c268f997310ec5 (diff) | |
download | gtk+-7a36b5df9082834f7f8d4c08cb5b1e18b91e2b34.tar.gz |
cssdefinecolorrule: Rework parser
Actually store the values that get parsed. And change the parsing code
to construct the rule in advance so that it can be set as the consumer
while parsing.
-rw-r--r-- | gtk/gtkcssdefinecolorrule.c | 50 | ||||
-rw-r--r-- | gtk/gtkcssdefinecolorruleprivate.h | 3 |
2 files changed, 39 insertions, 14 deletions
diff --git a/gtk/gtkcssdefinecolorrule.c b/gtk/gtkcssdefinecolorrule.c index 8f22023bd0..66fc36b8f9 100644 --- a/gtk/gtkcssdefinecolorrule.c +++ b/gtk/gtkcssdefinecolorrule.c @@ -60,9 +60,7 @@ gtk_css_define_color_rule_init (GtkCssDefineColorRule *define_color_rule) static GtkCssRule * gtk_css_define_color_rule_new (GtkCssRule *parent_rule, - GtkCssStyleSheet *parent_style_sheet, - const char *name, - GtkCssValue *color) + GtkCssStyleSheet *parent_style_sheet) { return g_object_new (GTK_TYPE_CSS_DEFINE_COLOR_RULE, "parent-rule", parent_rule, @@ -75,21 +73,25 @@ gtk_css_define_color_rule_new_parse (GtkCssTokenSource *source, GtkCssRule *parent_rule, GtkCssStyleSheet *parent_style_sheet) { + GtkCssDefineColorRulePrivate *priv; const GtkCssToken *token; GtkCssRule *result; - GtkCssValue *color; - char *name; g_return_val_if_fail (source != NULL, NULL); g_return_val_if_fail (parent_rule == NULL || GTK_IS_CSS_RULE (parent_rule), NULL); g_return_val_if_fail (GTK_IS_CSS_STYLE_SHEET (parent_style_sheet), NULL); + result = gtk_css_define_color_rule_new (parent_rule, parent_style_sheet); + priv = gtk_css_define_color_rule_get_instance_private (GTK_CSS_DEFINE_COLOR_RULE (result)); + gtk_css_token_source_set_consumer (source, G_OBJECT (result)); + token = gtk_css_token_source_get_token (source); if (token->type != GTK_CSS_TOKEN_AT_KEYWORD || g_ascii_strcasecmp (token->string.string, "define-color") != 0) { gtk_css_token_source_error (source, "Expected '@define-color'"); gtk_css_token_source_consume_all (source); + g_object_unref (result); return NULL; } gtk_css_token_source_consume_token (source); @@ -99,15 +101,16 @@ gtk_css_define_color_rule_new_parse (GtkCssTokenSource *source, { gtk_css_token_source_error (source, "Expected name of color"); gtk_css_token_source_consume_all (source); + g_object_unref (result); return NULL; } - name = g_strdup (token->string.string); + priv->name = g_strdup (token->string.string); gtk_css_token_source_consume_token (source); - color = gtk_css_color_value_token_parse (source); - if (color == NULL) + priv->color = gtk_css_color_value_token_parse (source); + if (priv->color == NULL) { - g_free (name); + g_object_unref (result); return NULL; } @@ -116,15 +119,34 @@ gtk_css_define_color_rule_new_parse (GtkCssTokenSource *source, { gtk_css_token_source_error (source, "Expected ';' at end of @define-color"); gtk_css_token_source_consume_all (source); - g_free (name); - _gtk_css_value_unref (color); + g_object_unref (result); return NULL; } gtk_css_token_source_consume_token (source); - result = gtk_css_define_color_rule_new (parent_rule, parent_style_sheet, name, color); - g_free (name); - _gtk_css_value_unref (color); return result; } +const char * +gtk_css_define_color_rule_get_name (GtkCssDefineColorRule *rule) +{ + GtkCssDefineColorRulePrivate *priv; + + g_return_val_if_fail (GTK_IS_CSS_DEFINE_COLOR_RULE (rule), NULL); + + priv = gtk_css_define_color_rule_get_instance_private (rule); + + return priv->name; +} + +GtkCssValue * +gtk_css_define_color_rule_get_value (GtkCssDefineColorRule *rule) +{ + GtkCssDefineColorRulePrivate *priv; + + g_return_val_if_fail (GTK_IS_CSS_DEFINE_COLOR_RULE (rule), NULL); + + priv = gtk_css_define_color_rule_get_instance_private (rule); + + return priv->color; +} diff --git a/gtk/gtkcssdefinecolorruleprivate.h b/gtk/gtkcssdefinecolorruleprivate.h index 30767268a0..383d755b45 100644 --- a/gtk/gtkcssdefinecolorruleprivate.h +++ b/gtk/gtkcssdefinecolorruleprivate.h @@ -51,6 +51,9 @@ GtkCssRule * gtk_css_define_color_rule_new_parse (GtkCssTokenSour GtkCssRule *parent_rule, GtkCssStyleSheet *parent_style_sheet); +const char * gtk_css_define_color_rule_get_name (GtkCssDefineColorRule *rule); +GtkCssValue * gtk_css_define_color_rule_get_value (GtkCssDefineColorRule *rule); + G_END_DECLS |