[gtk+] css: Add "border-spacing" CSS property



commit d7148a47182e0b0ca286243101d3774c6b3d4be5
Author: Benjamin Otte <otte redhat com>
Date:   Sat Dec 10 03:26:24 2016 +0100

    css: Add "border-spacing" CSS property
    
    It's using a GtkCssPositionValue, even though that name is wrong. But
    the functionality of managing 2 lengths is exactly what we want.
    
    Nobody is using this yet.

 gtk/gtkcsspositionvalue.c        |   26 ++++++++++++++++++++++++++
 gtk/gtkcsspositionvalueprivate.h |    5 +++--
 gtk/gtkcssstylepropertyimpl.c    |   17 +++++++++++++++++
 gtk/gtkcsstypesprivate.h         |    1 +
 4 files changed, 47 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkcsspositionvalue.c b/gtk/gtkcsspositionvalue.c
index 9102b16..62ecc68 100644
--- a/gtk/gtkcsspositionvalue.c
+++ b/gtk/gtkcsspositionvalue.c
@@ -291,6 +291,32 @@ _gtk_css_position_value_try_parse (GtkCssParser *parser)
   return position_value_parse (parser, TRUE);
 }
 
+GtkCssValue *
+gtk_css_position_value_parse_spacing (GtkCssParser *parser)
+{
+  GtkCssValue *x, *y;
+
+  x = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_LENGTH | GTK_CSS_POSITIVE_ONLY);
+  if (x == NULL)
+    return NULL;
+
+  if (gtk_css_number_value_can_parse (parser))
+    {
+      y = _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_LENGTH | GTK_CSS_POSITIVE_ONLY);
+      if (y == NULL)
+        {
+          _gtk_css_value_unref (x);
+          return NULL;
+        }
+    }
+  else
+    {
+      y = _gtk_css_value_ref (x);
+    }
+
+  return _gtk_css_position_value_new (x, y);
+}
+
 double
 _gtk_css_position_value_get_x (const GtkCssValue *position,
                                double             one_hundred_percent)
diff --git a/gtk/gtkcsspositionvalueprivate.h b/gtk/gtkcsspositionvalueprivate.h
index d1d113b..fc87fbc 100644
--- a/gtk/gtkcsspositionvalueprivate.h
+++ b/gtk/gtkcsspositionvalueprivate.h
@@ -29,11 +29,12 @@ GtkCssValue *   _gtk_css_position_value_new           (GtkCssValue            *x
                                                        GtkCssValue            *y);
 GtkCssValue *   _gtk_css_position_value_parse         (GtkCssParser           *parser);
 GtkCssValue *   _gtk_css_position_value_try_parse     (GtkCssParser           *parser);
+GtkCssValue *   gtk_css_position_value_parse_spacing  (GtkCssParser           *parser);
 
 double          _gtk_css_position_value_get_x         (const GtkCssValue      *position,
-                                                     double                  one_hundred_percent);
+                                                       double                  one_hundred_percent);
 double          _gtk_css_position_value_get_y         (const GtkCssValue      *position,
-                                                     double                  one_hundred_percent);
+                                                       double                  one_hundred_percent);
 
 
 G_END_DECLS
diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c
index 3571d68..d781d51 100644
--- a/gtk/gtkcssstylepropertyimpl.c
+++ b/gtk/gtkcssstylepropertyimpl.c
@@ -563,6 +563,13 @@ transform_value_parse (GtkCssStyleProperty *property,
 }
 
 static GtkCssValue *
+border_spacing_value_parse (GtkCssStyleProperty *property,
+                            GtkCssParser        *parser)
+{
+  return gtk_css_position_value_parse_spacing (parser);
+}
+
+static GtkCssValue *
 border_corner_radius_value_parse (GtkCssStyleProperty *property,
                                   GtkCssParser        *parser)
 {
@@ -1448,6 +1455,16 @@ _gtk_css_style_property_init_properties (void)
                                           NULL,
                                           _gtk_css_transform_value_new_none ());
 
+  gtk_css_style_property_register        ("border-spacing",
+                                          GTK_CSS_PROPERTY_BORDER_SPACING,
+                                          G_TYPE_NONE,
+                                          GTK_STYLE_PROPERTY_ANIMATED,
+                                          GTK_CSS_AFFECTS_SIZE,
+                                          border_spacing_value_parse,
+                                          NULL,
+                                          _gtk_css_position_value_new (_gtk_css_number_value_new (0, 
GTK_CSS_PX),
+                                                                       _gtk_css_number_value_new (0, 
GTK_CSS_PX)));
+
   gtk_css_style_property_register        ("min-width",
                                           GTK_CSS_PROPERTY_MIN_WIDTH,
                                           G_TYPE_INT,
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index bcc1dc0..644f007 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -207,6 +207,7 @@ enum { /*< skip >*/
   GTK_CSS_PROPERTY_ICON_SHADOW,
   GTK_CSS_PROPERTY_ICON_STYLE,
   GTK_CSS_PROPERTY_ICON_TRANSFORM,
+  GTK_CSS_PROPERTY_BORDER_SPACING,
   GTK_CSS_PROPERTY_MIN_WIDTH,
   GTK_CSS_PROPERTY_MIN_HEIGHT,
   GTK_CSS_PROPERTY_TRANSITION_PROPERTY,


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