[gtk+] css: Parse text-shadow values properly



commit 3759190c2674aebd6b40ff5f337b155073ed5b78
Author: Benjamin Otte <otte redhat com>
Date:   Tue Jun 10 01:04:55 2014 +0200

    css: Parse text-shadow values properly
    
    We used to accept the same syntax for text-shadow and icon-shadow as
    we accept for box-shadow. However, box-shadow does accept a spread and
    the inset keyword while the others should not.

 gtk/gtkcssshadowsvalue.c        |    5 +++--
 gtk/gtkcssshadowsvalueprivate.h |    3 ++-
 gtk/gtkcssshadowvalue.c         |   10 ++++++----
 gtk/gtkcssshadowvalueprivate.h  |    3 ++-
 gtk/gtkcssstylepropertyimpl.c   |   11 +++++++++--
 5 files changed, 22 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index 1107b2f..6aafa92 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -213,7 +213,8 @@ gtk_css_shadows_value_new (GtkCssValue **values,
 }
 
 GtkCssValue *
-_gtk_css_shadows_value_parse (GtkCssParser *parser)
+_gtk_css_shadows_value_parse (GtkCssParser *parser,
+                              gboolean      box_shadow_mode)
 {
   GtkCssValue *value, *result;
   GPtrArray *values;
@@ -224,7 +225,7 @@ _gtk_css_shadows_value_parse (GtkCssParser *parser)
   values = g_ptr_array_new ();
 
   do {
-    value = _gtk_css_shadow_value_parse (parser);
+    value = _gtk_css_shadow_value_parse (parser, box_shadow_mode);
 
     if (value == NULL)
       {
diff --git a/gtk/gtkcssshadowsvalueprivate.h b/gtk/gtkcssshadowsvalueprivate.h
index 5f2bdbb..4713b86 100644
--- a/gtk/gtkcssshadowsvalueprivate.h
+++ b/gtk/gtkcssshadowsvalueprivate.h
@@ -31,7 +31,8 @@
 G_BEGIN_DECLS
 
 GtkCssValue *   _gtk_css_shadows_value_new_none       (void);
-GtkCssValue *   _gtk_css_shadows_value_parse          (GtkCssParser             *parser);
+GtkCssValue *   _gtk_css_shadows_value_parse          (GtkCssParser             *parser,
+                                                       gboolean                  box_shadow_mode);
 
 gboolean        _gtk_css_shadows_value_is_none        (const GtkCssValue        *shadows);
 
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 6dcd2dd..fead494 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -209,7 +209,8 @@ value_is_done_parsing (GtkCssParser *parser)
 }
 
 GtkCssValue *
-_gtk_css_shadow_value_parse (GtkCssParser *parser)
+_gtk_css_shadow_value_parse (GtkCssParser *parser,
+                             gboolean      box_shadow_mode)
 {
   enum {
     HOFFSET,
@@ -223,7 +224,8 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
   gboolean inset;
   guint i;
 
-  inset = _gtk_css_parser_try (parser, "inset", TRUE);
+  if (box_shadow_mode)
+    inset = _gtk_css_parser_try (parser, "inset", TRUE);
 
   do
   {
@@ -254,7 +256,7 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
         else
           values[RADIUS] = _gtk_css_number_value_new (0.0, GTK_CSS_PX);
                                                         
-        if (_gtk_css_parser_has_number (parser))
+        if (box_shadow_mode && _gtk_css_parser_has_number (parser))
           {
             values[SPREAD] = _gtk_css_number_value_parse (parser,
                                                           GTK_CSS_PARSE_LENGTH
@@ -265,7 +267,7 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
         else
           values[SPREAD] = _gtk_css_number_value_new (0.0, GTK_CSS_PX);
       }
-    else if (!inset && _gtk_css_parser_try (parser, "inset", TRUE))
+    else if (!inset && box_shadow_mode && _gtk_css_parser_try (parser, "inset", TRUE))
       {
         if (values[HOFFSET] == NULL)
           goto fail;
diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h
index e46b303..1e5eb22 100644
--- a/gtk/gtkcssshadowvalueprivate.h
+++ b/gtk/gtkcssshadowvalueprivate.h
@@ -32,7 +32,8 @@ G_BEGIN_DECLS
 
 GtkCssValue *   _gtk_css_shadow_value_new_for_transition (GtkCssValue           *target);
 
-GtkCssValue *   _gtk_css_shadow_value_parse           (GtkCssParser             *parser);
+GtkCssValue *   _gtk_css_shadow_value_parse           (GtkCssParser             *parser,
+                                                       gboolean                  box_shadow_mode);
 
 gboolean        _gtk_css_shadow_value_get_inset       (const GtkCssValue        *shadow);
 
diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c
index f1acf9a..442c2b4 100644
--- a/gtk/gtkcssstylepropertyimpl.c
+++ b/gtk/gtkcssstylepropertyimpl.c
@@ -583,10 +583,17 @@ bindings_value_assign (GtkCssStyleProperty *property,
 }
 
 static GtkCssValue *
+box_shadow_value_parse (GtkCssStyleProperty *property,
+                        GtkCssParser        *parser)
+{
+  return _gtk_css_shadows_value_parse (parser, TRUE);
+}
+
+static GtkCssValue *
 shadow_value_parse (GtkCssStyleProperty *property,
                     GtkCssParser        *parser)
 {
-  return _gtk_css_shadows_value_parse (parser);
+  return _gtk_css_shadows_value_parse (parser, FALSE);
 }
 
 static GtkCssValue *
@@ -1014,7 +1021,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_BOX_SHADOW,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_ANIMATED,
-                                          shadow_value_parse,
+                                          box_shadow_value_parse,
                                           NULL,
                                           NULL,
                                           _gtk_css_shadows_value_new_none ());


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]