[gtk+] shorthand: Unify border parsing code



commit 6ebb85a69ef2cb75d6e4603298dbc84f01ae919c
Author: Benjamin Otte <otte redhat com>
Date:   Tue Jan 10 23:36:10 2012 +0100

    shorthand: Unify border parsing code
    
    Parse border.{top,right,bottom,left} into subproperties {1,2,3,4}.

 gtk/gtkcssshorthandpropertyimpl.c |   84 ++++++++++++-------------------------
 1 files changed, 27 insertions(+), 57 deletions(-)
---
diff --git a/gtk/gtkcssshorthandpropertyimpl.c b/gtk/gtkcssshorthandpropertyimpl.c
index 3b0f302..d2a62ea 100644
--- a/gtk/gtkcssshorthandpropertyimpl.c
+++ b/gtk/gtkcssshorthandpropertyimpl.c
@@ -29,6 +29,7 @@
 #include "gtkcssstylefuncsprivate.h"
 #include "gtkcsstypesprivate.h"
 #include "gtkprivatetypebuiltins.h"
+#include "gtkstylepropertiesprivate.h"
 #include "gtktypebuiltins.h"
 
 /* this is in case round() is not provided by the compiler, 
@@ -539,29 +540,31 @@ unpack_border (const GValue *value,
 }
 
 static void
-pack_border (GValue             *value,
-             GtkStyleProperties *props,
-             GtkStateFlags       state,
-             const char         *top,
-             const char         *left,
-             const char         *bottom,
-             const char         *right)
+pack_border (GtkCssShorthandProperty *shorthand,
+             GValue                  *value,
+             GtkStyleProperties      *props,
+             GtkStateFlags            state)
 {
+  GtkCssStyleProperty *prop;
   GtkBorder border;
-  int t, l, b, r;
-
-  gtk_style_properties_get (props,
-                            state,
-                            top, &t,
-                            left, &l,
-                            bottom, &b,
-                            right, &r,
-                            NULL);
-
-  border.top = t;
-  border.left = l;
-  border.bottom = b;
-  border.right = r;
+  const GValue *v;
+
+  prop = _gtk_css_shorthand_property_get_subproperty (shorthand, 0);
+  v = _gtk_style_properties_peek_property (props, prop, state);
+  if (v)
+    border.top = g_value_get_int (v);
+  prop = _gtk_css_shorthand_property_get_subproperty (shorthand, 1);
+  v = _gtk_style_properties_peek_property (props, prop, state);
+  if (v)
+    border.right = g_value_get_int (v);
+  prop = _gtk_css_shorthand_property_get_subproperty (shorthand, 2);
+  v = _gtk_style_properties_peek_property (props, prop, state);
+  if (v)
+    border.bottom = g_value_get_int (v);
+  prop = _gtk_css_shorthand_property_get_subproperty (shorthand, 3);
+  v = _gtk_style_properties_peek_property (props, prop, state);
+  if (v)
+    border.left = g_value_get_int (v);
 
   g_value_set_boxed (value, &border);
 }
@@ -576,17 +579,6 @@ unpack_border_width (GtkCssShorthandProperty *shorthand,
                         "border-bottom-width", "border-right-width");
 }
 
-static void
-pack_border_width (GtkCssShorthandProperty *shorthand,
-                   GValue                  *value,
-                   GtkStyleProperties      *props,
-                   GtkStateFlags            state)
-{
-  pack_border (value, props, state,
-               "border-top-width", "border-left-width",
-               "border-bottom-width", "border-right-width");
-}
-
 static GParameter *
 unpack_padding (GtkCssShorthandProperty *shorthand,
                 const GValue            *value,
@@ -597,17 +589,6 @@ unpack_padding (GtkCssShorthandProperty *shorthand,
                         "padding-bottom", "padding-right");
 }
 
-static void
-pack_padding (GtkCssShorthandProperty *shorthand,
-              GValue                  *value,
-              GtkStyleProperties      *props,
-              GtkStateFlags            state)
-{
-  pack_border (value, props, state,
-               "padding-top", "padding-left",
-               "padding-bottom", "padding-right");
-}
-
 static GParameter *
 unpack_margin (GtkCssShorthandProperty *shorthand,
                const GValue            *value,
@@ -618,17 +599,6 @@ unpack_margin (GtkCssShorthandProperty *shorthand,
                         "margin-bottom", "margin-right");
 }
 
-static void
-pack_margin (GtkCssShorthandProperty *shorthand,
-             GValue                  *value,
-             GtkStyleProperties      *props,
-             GtkStateFlags            state)
-{
-  pack_border (value, props, state,
-               "margin-top", "margin-left",
-               "margin-bottom", "margin-right");
-}
-
 static GParameter *
 unpack_border_radius (GtkCssShorthandProperty *shorthand,
                       const GValue            *value,
@@ -937,19 +907,19 @@ _gtk_css_shorthand_property_init_properties (void)
                                           margin_subproperties,
                                           parse_border_width,
                                           unpack_margin,
-                                          pack_margin);
+                                          pack_border);
   _gtk_css_shorthand_property_register   ("padding",
                                           GTK_TYPE_BORDER,
                                           padding_subproperties,
                                           parse_border_width,
                                           unpack_padding,
-                                          pack_padding);
+                                          pack_border);
   _gtk_css_shorthand_property_register   ("border-width",
                                           GTK_TYPE_BORDER,
                                           border_width_subproperties,
                                           parse_border_width,
                                           unpack_border_width,
-                                          pack_border_width);
+                                          pack_border);
   _gtk_css_shorthand_property_register   ("border-radius",
                                           G_TYPE_INT,
                                           border_radius_subproperties,



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