[gtk+] gsk: Make GskRenderNode a boxed type
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gsk: Make GskRenderNode a boxed type
- Date: Tue, 20 Dec 2016 17:08:09 +0000 (UTC)
commit 6fb46e394362956e8035ead1f4b5dab89b8cf233
Author: Benjamin Otte <otte redhat com>
Date: Sat Dec 10 15:33:16 2016 +0100
gsk: Make GskRenderNode a boxed type
gsk/gskrendernode.c | 177 ++++----------------------------------------
gsk/gskrendernode.h | 4 +-
gsk/gskrendernodeprivate.h | 13 ---
3 files changed, 17 insertions(+), 177 deletions(-)
---
diff --git a/gsk/gskrendernode.c b/gsk/gskrendernode.c
index 9a72da2..54ea5a5 100644
--- a/gsk/gskrendernode.c
+++ b/gsk/gskrendernode.c
@@ -55,93 +55,16 @@
#include <gobject/gvaluecollector.h>
/**
- * GskRenderNode: (ref-func gsk_render_node_ref) (unref-func gsk_render_node_unref) (set-value-func
gsk_value_set_render_node) (get-value-func gsk_value_get_render_node)
+ * GskRenderNode: (ref-func gsk_render_node_ref) (unref-func gsk_render_node_unref)
*
* The `GskRenderNode` structure contains only private data.
*
* Since: 3.90
*/
-static void
-value_render_node_init (GValue *value)
-{
- value->data[0].v_pointer = NULL;
-}
-
-static void
-value_render_node_free (GValue *value)
-{
- if (value->data[0].v_pointer != NULL)
- gsk_render_node_unref (value->data[0].v_pointer);
-}
-
-static void
-value_render_node_copy (const GValue *src,
- GValue *dst)
-{
- if (src->data[0].v_pointer != NULL)
- dst->data[0].v_pointer = gsk_render_node_ref (src->data[0].v_pointer);
- else
- dst->data[0].v_pointer = NULL;
-}
-
-static gpointer
-value_render_node_peek_pointer (const GValue *value)
-{
- return value->data[0].v_pointer;
-}
-
-static gchar *
-value_render_node_collect_value (GValue *value,
- guint n_collect_values,
- GTypeCValue *collect_values,
- guint collect_flags)
-{
- GskRenderNode *node;
-
- node = collect_values[0].v_pointer;
-
- if (node == NULL)
- {
- value->data[0].v_pointer = NULL;
- return NULL;
- }
-
- if (node->parent_instance.g_class == NULL)
- return g_strconcat ("invalid unclassed GskRenderNode pointer for "
- "value type '",
- G_VALUE_TYPE_NAME (value),
- "'",
- NULL);
-
- value->data[0].v_pointer = gsk_render_node_ref (node);
-
- return NULL;
-}
-
-static gchar *
-value_render_node_lcopy_value (const GValue *value,
- guint n_collect_values,
- GTypeCValue *collect_values,
- guint collect_flags)
-{
- GskRenderNode **node_p = collect_values[0].v_pointer;
-
- if (node_p == NULL)
- return g_strconcat ("value location for '",
- G_VALUE_TYPE_NAME (value),
- "' passed as NULL",
- NULL);
-
- if (value->data[0].v_pointer == NULL)
- *node_p = NULL;
- else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
- *node_p = value->data[0].v_pointer;
- else
- *node_p = gsk_render_node_ref (value->data[0].v_pointer);
-
- return NULL;
-}
+G_DEFINE_BOXED_TYPE (GskRenderNode, gsk_render_node,
+ gsk_render_node_ref,
+ gsk_render_node_unref)
static void
gsk_render_node_finalize (GskRenderNode *self)
@@ -158,28 +81,20 @@ gsk_render_node_finalize (GskRenderNode *self)
while (gsk_render_node_iter_next (&iter, NULL))
gsk_render_node_iter_remove (&iter);
- g_type_free_instance ((GTypeInstance *) self);
-}
-
-static void
-gsk_render_node_class_base_init (GskRenderNodeClass *klass)
-{
+ g_slice_free (GskRenderNode, self);
}
-static void
-gsk_render_node_class_base_finalize (GskRenderNodeClass *klass)
-{
-}
-
-static void
-gsk_render_node_class_init (GskRenderNodeClass *klass)
+/*< private >
+ * gsk_render_node_new:
+ * @renderer: a #GskRenderer
+ *
+ * Returns: (transfer full): the newly created #GskRenderNode
+ */
+GskRenderNode *
+gsk_render_node_new (void)
{
- klass->finalize = gsk_render_node_finalize;
-}
+ GskRenderNode *self = g_slice_new0 (GskRenderNode);
-static void
-gsk_render_node_init (GskRenderNode *self)
-{
self->ref_count = 1;
graphene_rect_init_from_rect (&self->bounds, graphene_rect_zero ());
@@ -193,68 +108,8 @@ gsk_render_node_init (GskRenderNode *self)
self->is_mutable = TRUE;
self->needs_world_matrix_update = TRUE;
-}
-GType
-gsk_render_node_get_type (void)
-{
- static volatile gsize gsk_render_node_type__volatile;
-
- if (g_once_init_enter (&gsk_render_node_type__volatile))
- {
- static const GTypeFundamentalInfo finfo = {
- (G_TYPE_FLAG_CLASSED |
- G_TYPE_FLAG_INSTANTIATABLE |
- G_TYPE_FLAG_DERIVABLE |
- G_TYPE_FLAG_DEEP_DERIVABLE),
- };
- static const GTypeValueTable render_node_value_table = {
- value_render_node_init,
- value_render_node_free,
- value_render_node_copy,
- value_render_node_peek_pointer,
- "p", value_render_node_collect_value,
- "p", value_render_node_lcopy_value,
- };
- const GTypeInfo render_node_info = {
- sizeof (GskRenderNodeClass),
-
- (GBaseInitFunc) gsk_render_node_class_base_init,
- (GBaseFinalizeFunc) gsk_render_node_class_base_finalize,
- (GClassInitFunc) gsk_render_node_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
-
- sizeof (GskRenderNode), 16,
- (GInstanceInitFunc) gsk_render_node_init,
-
- &render_node_value_table,
- };
- GType gsk_render_node_type =
- g_type_register_fundamental (g_type_fundamental_next (),
- g_intern_static_string ("GskRenderNode"),
- &render_node_info,
- &finfo,
- 0);
-
- g_once_init_leave (&gsk_render_node_type__volatile, gsk_render_node_type);
- }
-
- return gsk_render_node_type__volatile;
-}
-
-/*< private >
- * gsk_render_node_new:
- * @renderer: a #GskRenderer
- *
- * Returns: (transfer full): the newly created #GskRenderNode
- */
-GskRenderNode *
-gsk_render_node_new (void)
-{
- GskRenderNode *res = (GskRenderNode *) g_type_create_instance (GSK_TYPE_RENDER_NODE);
-
- return res;
+ return self;
}
/**
@@ -294,7 +149,7 @@ gsk_render_node_unref (GskRenderNode *node)
g_return_if_fail (GSK_IS_RENDER_NODE (node));
if (g_atomic_int_dec_and_test (&node->ref_count))
- GSK_RENDER_NODE_GET_CLASS (node)->finalize (node);
+ gsk_render_node_finalize (node);
}
/**
diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h
index 5edb8b6..74fdf0d 100644
--- a/gsk/gskrendernode.h
+++ b/gsk/gskrendernode.h
@@ -29,11 +29,9 @@ G_BEGIN_DECLS
#define GSK_TYPE_RENDER_NODE (gsk_render_node_get_type ())
-#define GSK_RENDER_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_RENDER_NODE, GskRenderNode))
-#define GSK_IS_RENDER_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_RENDER_NODE))
+#define GSK_IS_RENDER_NODE(obj) ((obj) != NULL)
typedef struct _GskRenderNode GskRenderNode;
-typedef struct _GskRenderNodeClass GskRenderNodeClass;
GDK_AVAILABLE_IN_3_90
GType gsk_render_node_get_type (void) G_GNUC_CONST;
diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h
index 01e1526..43b2970 100644
--- a/gsk/gskrendernodeprivate.h
+++ b/gsk/gskrendernodeprivate.h
@@ -6,14 +6,8 @@
G_BEGIN_DECLS
-#define GSK_RENDER_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_RENDER_NODE,
GskRenderNodeClass))
-#define GSK_IS_RENDER_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_RENDER_NODE))
-#define GSK_RENDER_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_RENDER_NODE,
GskRenderNodeClass))
-
struct _GskRenderNode
{
- GTypeInstance parent_instance;
-
volatile int ref_count;
/* The graph */
@@ -63,13 +57,6 @@ struct _GskRenderNode
gboolean needs_world_matrix_update : 1;
};
-struct _GskRenderNodeClass
-{
- GTypeClass parent_class;
-
- void (* finalize) (GskRenderNode *node);
-};
-
GskRenderNode *gsk_render_node_new (void);
void gsk_render_node_make_immutable (GskRenderNode *node);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]