[gtk-css-engine] [node, style] Update to ccss 0.6 API.



commit fd51f218a3ec907bbab498525e996d994fd53540
Author: Robert Staudinger <robsta gnome org>
Date:   Wed Sep 9 17:37:16 2009 +0200

    [node, style] Update to ccss 0.6 API.

 configure.in    |    2 +-
 src/gce-node.c  |  306 +++++++++++++++++++++++++++++--------------------------
 src/gce-node.h  |   31 ++----
 src/gce-style.c |   40 ++++----
 4 files changed, 194 insertions(+), 185 deletions(-)
---
diff --git a/configure.in b/configure.in
index 834c1b8..f0f9225 100644
--- a/configure.in
+++ b/configure.in
@@ -79,7 +79,7 @@ GTK_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0`
 AC_SUBST(GTK_VERSION) 
 
 # Maybe it would work with gtk+-2.8, the first sporting cairo, right?
-pkgs='ccss-gtk-1 >= 0.5.1'
+pkgs='ccss-gtk-1 >= 0.6'
 
 AC_MSG_CHECKING([for SVG support in ccss-cairo])
 with_rsvg=`$PKG_CONFIG --variable=ccss_with_rsvg ccss-cairo-1`
diff --git a/src/gce-node.c b/src/gce-node.c
index 81f0b9c..c6566c3 100644
--- a/src/gce-node.c
+++ b/src/gce-node.c
@@ -25,10 +25,9 @@
 #include "gce-node.h"
 #include "config.h"
 
-struct GceNode_ {
-	ccss_node_t		 parent;
+typedef struct {
 	GtkWidget		*widget;
-	struct {
+	struct GceNodeAttribs {
 		char const	*classes[2];
 		char const	*pseudo_classes[2];
 		char const	*gap;
@@ -37,7 +36,7 @@ struct GceNode_ {
 		char const	*edge;
 		char const	*expander_style;
 	} attribs;
-	enum {
+	enum GceNodeFlavor {
 		UNSET,
 		CONTAINER,
 		PRIMITIVE,
@@ -47,85 +46,22 @@ struct GceNode_ {
 		char const	*primitive;
 		GType		 gtype;
 	} impl;
-};
-
-static struct {
-	GceNode nodes[GCE_NODE_CACHE_SIZE];
-	int	cursor;
-} _node_cache = {
-	.cursor = -1
-};
-
-static ccss_node_class_t * peek_node_class (void);
-
-GceNode *
-gce_node_cache_get_top_node (void)
-{
-	return &_node_cache.nodes[_node_cache.cursor];
-}
-
-static GceNode *
-fetch_node (void)
-{
-	GceNode *node;
-
-	g_assert (_node_cache.cursor < (GCE_NODE_CACHE_SIZE - 1));
-
-	_node_cache.cursor++;
-	node = &_node_cache.nodes[_node_cache.cursor];
-	memset (node, 0, sizeof (*node));
+} GceNode;
 
-	ccss_node_init ((ccss_node_t *) node, peek_node_class ());
+static ccss_node_t * create_widget_container_node       (GtkWidget		*widget);
+static ccss_node_t * create_widget_node			(GtkWidget		*widget,
+							 struct GceNodeAttribs   attribs);
+static ccss_node_t * create_widget_base_node		(GtkWidget		*widget,
+							 enum GceNodeFlavor	 flavor,
+							 GType			 gtype);
 
-	return node;
-}
-
-GceNode *
-gce_node_cache_fetch_node (GtkWidget	*widget, 
-			   char const	*class_name,
-			   char const	*pseudo_class,
-			   char const	*shadow,
-			   char const	*orientation,
-			   char const	*gap,
-			   char const	*edge,
-			   char const	*expander_style,
-			   char const	*primitive)
-{
-	GceNode *node;
-
-	node = fetch_node ();
-
-	node->widget = widget;
-	node->attribs.classes[0] = class_name;
-	node->attribs.classes[1] = NULL;
-	node->attribs.pseudo_classes[0] = pseudo_class;
-	node->attribs.pseudo_classes[1] = NULL;
-	node->attribs.gap = gap;
-	node->attribs.shadow = shadow;
-	node->attribs.orientation = orientation;
-	node->attribs.edge = edge;
-	node->attribs.expander_style = expander_style;
-	node->flavor = PRIMITIVE;	
-	node->impl.primitive = primitive;
-
-	return node;
-}
-
-void
-gce_node_cache_release_node (GceNode *node)
-{
-	g_assert (_node_cache.cursor >= 0 && 
-		  node == &_node_cache.nodes[_node_cache.cursor]);
-
-	_node_cache.cursor--;
-}
-
-static gboolean
-is_a (GceNode const	*node,
+static bool
+is_a (ccss_node_t const	*self,
       char const	*type_name)
 {
-	GType	gtype;
-	bool	is_matching;
+	GceNode const   *node = ccss_node_get_user_data (self);
+	GType		 gtype;
+	bool		 is_matching;
 
 	switch (node->flavor) {
 	case PRIMITIVE:
@@ -146,11 +82,12 @@ is_a (GceNode const	*node,
 	}
 }
 
-static GceNode *
-get_container (GceNode const *node)
+static ccss_node_t *
+get_container (ccss_node_t const *self)
 {
-	GceNode		*container_node;
+	GceNode const   *node = ccss_node_get_user_data (self);
 	GtkWidget	*container;
+	ccss_node_t	*container_node;
 
 	g_assert (node);
 
@@ -160,18 +97,12 @@ get_container (GceNode const *node)
 	case CONTAINER:
 		container = gtk_widget_get_parent (node->widget);
 		if (container) {
-			container_node = fetch_node ();
-			container_node->widget = (GtkWidget *) g_object_ref (G_OBJECT (container));
-			container_node->flavor = CONTAINER;
-			container_node->impl.gtype = G_OBJECT_TYPE (G_OBJECT (container));
+			container_node = create_widget_container_node (container);
 		}
 		break;
 	case PRIMITIVE:
-		container_node = fetch_node ();
-		container_node->widget = (GtkWidget *) g_object_ref (G_OBJECT (node->widget));
-		container_node->flavor = UNSET;
 		/* Properties propagate to the primitive's widget. */
-		container_node->attribs = node->attribs;
+		container_node = create_widget_node (node->widget, node->attribs);
 		break;
 	case TYPE:
 		g_assert_not_reached ();
@@ -183,10 +114,11 @@ get_container (GceNode const *node)
 	return container_node;
 }
 
-static GceNode *
-get_base_style (GceNode const *node)
+static ccss_node_t *
+get_base_style (ccss_node_t const *self)
 {
-	GceNode		*base_node;
+	GceNode const   *node = ccss_node_get_user_data (self);
+	ccss_node_t	*base_node;
 
 	g_assert (node);
 
@@ -197,11 +129,9 @@ get_base_style (GceNode const *node)
 			base_node = NULL;
 		} else {
 			/* inherit from superclass widget */
-			base_node = fetch_node ();
-			base_node->widget = (GtkWidget *) g_object_ref (G_OBJECT (node->widget));
-			base_node->flavor = TYPE;
-			base_node->impl.gtype = g_type_parent (G_OBJECT_TYPE (G_OBJECT (node->widget)));
-
+			base_node = create_widget_base_node (node->widget,
+							     TYPE,
+							     g_type_parent (G_OBJECT_TYPE (node->widget)));
 		}
 		break;
 	case CONTAINER:
@@ -210,10 +140,9 @@ get_base_style (GceNode const *node)
 			base_node = NULL;
 		} else {
 			/* inherit from superclass widget */
-			base_node = fetch_node ();
-			base_node->widget = (GtkWidget *) g_object_ref (G_OBJECT (node->widget));
-			base_node->flavor = CONTAINER;
-			base_node->impl.gtype = g_type_parent (node->impl.gtype);
+			base_node = create_widget_base_node (node->widget,
+							     CONTAINER,
+							     g_type_parent (node->impl.gtype));
 		} 
 		break;
 	case PRIMITIVE:
@@ -225,10 +154,9 @@ get_base_style (GceNode const *node)
 			base_node = NULL;
 		} else {
 			/* inherit from superclass widget */
-			base_node = fetch_node ();
-			base_node->widget = (GtkWidget *) g_object_ref (G_OBJECT (node->widget));
-			base_node->flavor = TYPE, 
-			base_node->impl.gtype = g_type_parent (node->impl.gtype);
+			base_node = create_widget_base_node (node->widget,
+							     TYPE,
+							     g_type_parent (node->impl.gtype));
 		} 
 		break;
 	default:
@@ -240,8 +168,10 @@ get_base_style (GceNode const *node)
 }
 
 static char const *
-get_id (GceNode const *node)
+get_id (ccss_node_t const *self)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
+
 	g_return_val_if_fail (node, NULL);
 
 	switch (node->flavor) {
@@ -257,8 +187,10 @@ get_id (GceNode const *node)
 }
 
 static char const *
-get_type (GceNode const *node)
+get_type (ccss_node_t const *self)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
+
 	g_return_val_if_fail (node, NULL);
 
 	switch (node->flavor) {
@@ -277,16 +209,20 @@ get_type (GceNode const *node)
 }
 
 static char const **
-get_classes (GceNode const *node)
+get_classes (ccss_node_t const *self)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
+
 	g_return_val_if_fail (node, NULL);
 
 	return (char const **) node->attribs.classes;
 }
 
 static char const **
-get_pseudo_classes (GceNode const *node)
+get_pseudo_classes (ccss_node_t const *self)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
+
 	g_return_val_if_fail (node, NULL);
 
 	return (char const **) node->attribs.pseudo_classes;
@@ -348,9 +284,10 @@ _to_string (GValue const *value)
 }
 
 static char *
-get_attribute (GceNode const	*node,
-	       char const	*name)
+get_attribute (ccss_node_t const	*self,
+	       char const		*name)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
 	GParamSpec	*param;
 	GValue		 property = { 0, };
 
@@ -399,13 +336,15 @@ get_attribute (GceNode const	*node,
 	return NULL;
 }
 
-static gboolean
-get_viewport (GceNode const	*node,
-	      uint32_t		*x,
-	      uint32_t		*y,
-	      uint32_t		*width,
-	      uint32_t		*height)
+static bool
+get_viewport (ccss_node_t const	*self,
+	      double		*x,
+	      double		*y,
+	      double		*width,
+	      double		*height)
 {
+	GceNode const   *node = ccss_node_get_user_data (self);
+
 	switch (node->flavor) {
 	case UNSET:
 	case PRIMITIVE:
@@ -424,45 +363,122 @@ get_viewport (GceNode const	*node,
 }
 
 static void
-release (GceNode *node)
+release (ccss_node_t *self)
 {
-	g_assert (node == gce_node_cache_get_top_node ());
-
-	if (node->widget) {
-		g_object_unref (G_OBJECT (node->widget));
-	}
-
-	gce_node_cache_release_node (node);
+	gce_node_cache_release_node (self);
 }
 
 static ccss_node_class_t _node_class = {
-	.is_a			= (ccss_node_is_a_f) is_a,
-	.get_container		= (ccss_node_get_container_f) get_container,
-	.get_base_style		= (ccss_node_get_base_style_f) get_base_style,
-	.get_id			= (ccss_node_get_id_f) get_id,
-	.get_type		= (ccss_node_get_type_f) get_type,
-	.get_classes		= (ccss_node_get_classes_f) get_classes,
-	.get_pseudo_classes	= (ccss_node_get_pseudo_classes_f) get_pseudo_classes,
-	.get_attribute		= (ccss_node_get_attribute_f) get_attribute,
-	.get_viewport		= (ccss_node_get_viewport_f) get_viewport,
-	.release		= (ccss_node_release_f) release
+	.is_a			= is_a,
+	.get_container		= get_container,
+	.get_base_style		= get_base_style,
+	.get_instance		= NULL,
+	.get_id			= get_id,
+	.get_type		= get_type,
+	.get_classes		= get_classes,
+	.get_pseudo_classes	= get_pseudo_classes,
+	.get_attribute		= get_attribute,
+	.get_style		= NULL,
+	.get_viewport		= get_viewport,
+	.release		= release
 };
 
-static ccss_node_class_t *
-peek_node_class (void)
+ccss_node_t *
+gce_node_cache_fetch_node (GtkWidget	*widget,
+			   char const	*class_name,
+			   char const	*pseudo_class,
+			   char const	*shadow,
+			   char const	*orientation,
+			   char const	*gap,
+			   char const	*edge,
+			   char const	*expander_style,
+			   char const	*primitive)
 {
-	return &_node_class;
+	ccss_node_t     *self;
+	GceNode		*node;
+
+	node = g_new0 (GceNode, 1);
+	node->widget = widget;
+	node->attribs.classes[0] = class_name;
+	node->attribs.classes[1] = NULL;
+	node->attribs.pseudo_classes[0] = pseudo_class;
+	node->attribs.pseudo_classes[1] = NULL;
+	node->attribs.gap = gap;
+	node->attribs.shadow = shadow;
+	node->attribs.orientation = orientation;
+	node->attribs.edge = edge;
+	node->attribs.expander_style = expander_style;
+	node->flavor = PRIMITIVE;
+	node->impl.primitive = primitive;
+
+	self = ccss_node_create (&_node_class,
+				 CCSS_NODE_CLASS_N_METHODS (_node_class),
+				 node);
+	return self;
 }
 
-GtkWidget *
-gce_node_get_widget (const GceNode *node)
+void
+gce_node_cache_release_node (ccss_node_t *self)
 {
-	return node->widget;
+	GceNode *node;
+
+	node = ccss_node_get_user_data (self);
+	g_free (node);
+
+	ccss_node_destroy (self);
 }
 
-char const *
-gce_node_get_primitive (const GceNode *node)
+static ccss_node_t *
+create_widget_container_node (GtkWidget *widget)
 {
-	return node->impl.primitive;
+	ccss_node_t     *self;
+	GceNode		*node;
+
+	node = g_new0 (GceNode, 1);
+	node->widget = widget;
+	node->flavor = CONTAINER;
+	node->impl.gtype = G_OBJECT_TYPE (widget);
+
+	self = ccss_node_create (&_node_class,
+				 CCSS_NODE_CLASS_N_METHODS (_node_class),
+				 node);
+	return self;
+}
+
+static ccss_node_t *
+create_widget_node (GtkWidget			*widget,
+		    struct GceNodeAttribs        attribs)
+{
+	ccss_node_t     *self;
+	GceNode		*node;
+
+	node = g_new0 (GceNode, 1);
+	node->widget = widget;
+	node->flavor = UNSET;
+	node->attribs = attribs;
+
+	self = ccss_node_create (&_node_class,
+				 CCSS_NODE_CLASS_N_METHODS (_node_class),
+				 node);
+	return self;
+}
+
+static ccss_node_t *
+create_widget_base_node (GtkWidget		*widget,
+			 enum GceNodeFlavor	 flavor,
+			 GType			 gtype)
+{
+	ccss_node_t     *self;
+	GceNode		*node;
+
+	node = g_new0 (GceNode, 1);
+	node->widget = widget;
+	node->flavor = flavor;
+	node->impl.gtype = gtype;
+
+	self = ccss_node_create (&_node_class,
+				 CCSS_NODE_CLASS_N_METHODS (_node_class),
+				 node);
+	return self;
 }
 
diff --git a/src/gce-node.h b/src/gce-node.h
index 024793c..0420707 100644
--- a/src/gce-node.h
+++ b/src/gce-node.h
@@ -23,29 +23,22 @@
 #define GCE_NODE_H
 
 #include <glib.h>
+#include <ccss-gtk/ccss-gtk.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-#define GCE_NODE_CACHE_SIZE 24
-
-typedef struct GceNode_ GceNode;
-
-GceNode * gce_node_cache_fetch_node (GtkWidget	*widget, 
-				     char const	*class_name,
-				     char const *pseudo_class,
-				     char const *shadow,
-				     char const *orientation,
-				     char const *gap,
-				     char const *edge,
-				     char const *expander_style,
-				     char const *primitive);
-
-GceNode * gce_node_cache_get_top_node (void);
-void gce_node_cache_release_node (GceNode *node);
-
-GtkWidget *	gce_node_get_widget	(const GceNode *node);
-char const *	gce_node_get_primitive	(const GceNode *node);
+ccss_node_t * gce_node_cache_fetch_node	(GtkWidget	*widget,
+					 char const	*class_name,
+					 char const	*pseudo_class,
+					 char const	*shadow,
+					 char const	*orientation,
+					 char const	*gap,
+					 char const	*edge,
+					 char const	*expander_style,
+					 char const	*primitive);
+
+void gce_node_cache_release_node	(ccss_node_t	*node);
 
 G_END_DECLS
 
diff --git a/src/gce-style.c b/src/gce-style.c
index aeb2506..482aa08 100644
--- a/src/gce-style.c
+++ b/src/gce-style.c
@@ -54,7 +54,7 @@ widget_destroy_cb (GtkWidget	 *widget,
 
 static void
 rectangle (GceStyle		*self, 
-	   GceNode 		*node,
+	   ccss_node_t 		*node,
 	   GdkWindow		*window, 
 	   GdkRectangle		*area, 
 	   GtkWidget		*widget, 
@@ -134,7 +134,7 @@ rectangle (GceStyle		*self,
 
 static void
 gap (GceStyle		*self,
-     GceNode 		*node,
+     ccss_node_t	*node,
      GdkWindow		*window, 
      GdkRectangle	*area, 
      GtkWidget		*widget, 
@@ -195,7 +195,7 @@ draw_hline (GtkStyle		*self,
 	    gint		 y)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 	gint		 width = x2 - x1 + 1;
 	gint		 height = 2;
 
@@ -229,7 +229,7 @@ draw_vline (GtkStyle		*self,
 	    gint		 x)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 	gint		 width = 2;
 	gint		 height = y2 - y1 + 1;
 
@@ -266,7 +266,7 @@ draw_shadow (GtkStyle		*self,
 	     gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "shadow", shadow, detail, x, y, width, height);
@@ -299,7 +299,7 @@ draw_box (GtkStyle		*self,
 	  gint			 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "box", shadow, detail, x, y, width, height);
@@ -332,7 +332,7 @@ draw_flat_box (GtkStyle		*self,
 	       gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "flat-box", shadow, detail, x, y, width, height);
@@ -365,7 +365,7 @@ draw_check (GtkStyle		*self,
 	    gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "check", shadow, detail, x, y, width, height);
@@ -398,7 +398,7 @@ draw_option (GtkStyle		 *self,
 	     gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "option", shadow, detail, x, y, width, height);
@@ -434,7 +434,7 @@ draw_shadow_gap (GtkStyle		*self,
 		 gint			 gap_width)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "shadow-gap", shadow, detail, x, y, width, height);
@@ -470,7 +470,7 @@ draw_box_gap (GtkStyle			*self,
 	      gint			 gap_width)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "box-gap", shadow, detail, x, y, width, height);
@@ -505,7 +505,7 @@ draw_extension (GtkStyle	*self,
 {
 	char const	*role;
 	gint		 gap_width;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "extension", shadow, detail, x, y, width, height);
@@ -550,7 +550,7 @@ draw_slider (GtkStyle		*self,
 	     GtkOrientation	 orientation)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "slider", shadow, detail, x, y, width, height);
@@ -585,7 +585,7 @@ draw_handle (GtkStyle		*self,
 	     GtkOrientation	 orientation)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "handle", shadow, detail, x, y, width, height);
@@ -619,7 +619,7 @@ draw_resize_grip (GtkStyle		*self,
 		  gint			 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "resize-grip", -1, detail, x, y, width, height);
@@ -650,7 +650,7 @@ draw_focus (GtkStyle		*self,
 	    gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "focus", -1, detail, x, y, width, height);
@@ -683,7 +683,7 @@ draw_expander (GtkStyle		*self,
 #define DEFAULT_EXPANDER_SIZE 12
 	char const	*role;
 	gint		 expander_size;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "expander", -1, detail, x, y, -1, -1);
@@ -727,7 +727,7 @@ draw_diamond (GtkStyle		*self,
 	      gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "diamond", shadow, detail, x, y, width, height);
@@ -765,7 +765,7 @@ draw_arrow (GtkStyle		*self,
 	    gint		 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "arrow", shadow, detail, x, y, width, height);
@@ -799,7 +799,7 @@ draw_tab (GtkStyle		*self,
 	  gint			 height)
 {
 	char const	*role;
-	GceNode		*node = NULL;
+	ccss_node_t	*node = NULL;
 
 	detail = gce_maps_get_detail (detail);
 	role = gce_maps_match_role (widget, "tab", shadow, detail, x, y, width, height);



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