[gtk-css-engine] [node, style] Update to ccss 0.6 API.
- From: Robert Staudinger <robsta src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk-css-engine] [node, style] Update to ccss 0.6 API.
- Date: Wed, 9 Sep 2009 15:37:39 +0000 (UTC)
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]