From ac5e277a71003ef01e049b1b2d6aea1c447146f3 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 10 Dec 2016 21:42:01 +0100 Subject: [PATCH] gsk: Add GskRenderNodeType For now, this is unused. --- docs/reference/gsk/gsk4-sections.txt | 2 ++ gsk/gskenums.h | 18 +++++++++++++++++ gsk/gskrenderer.c | 2 +- gsk/gskrendernode.c | 30 +++++++++++++++++++++++++--- gsk/gskrendernode.h | 3 +++ gsk/gskrendernodeprivate.h | 4 +++- 6 files changed, 54 insertions(+), 5 deletions(-) diff --git a/docs/reference/gsk/gsk4-sections.txt b/docs/reference/gsk/gsk4-sections.txt index 0282fd2087..6518d1f579 100644 --- a/docs/reference/gsk/gsk4-sections.txt +++ b/docs/reference/gsk/gsk4-sections.txt @@ -27,6 +27,8 @@ GSK_TYPE_SCALING_FILTER GskRenderNode gsk_render_node_ref gsk_render_node_unref +GskRenderNodeType +gsk_render_node_get_node_type gsk_render_node_get_parent gsk_render_node_get_first_child gsk_render_node_get_last_child diff --git a/gsk/gskenums.h b/gsk/gskenums.h index 28d4dcafe7..9040c69cbf 100644 --- a/gsk/gskenums.h +++ b/gsk/gskenums.h @@ -22,6 +22,24 @@ #error "Only can be included directly." #endif +/** + * GskRenderNodeType: + * @GSK_NOT_A_RENDER_NODE: Error type. No node will ever have this type. + * @GSK_CONTAINER_NODE: A node containing a stack of children + * @GSK_CAIRO_NODE: A node drawing a #cairo_surface_t + * @GSK_TEXTURE_NODE: A node drawing a #GskTexture + * + * The type of a node determines what the node is rendering. + * + * Since: 3.90 + **/ +typedef enum { + GSK_NOT_A_RENDER_NODE = 0, + GSK_CONTAINER_NODE, + GSK_CAIRO_NODE, + GSK_TEXTURE_NODE +} GskRenderNodeType; + /** * GskScalingFilter: * @GSK_SCALING_FILTER_LINEAR: linear interpolation filter diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c index 7682e9ffa3..8738067628 100644 --- a/gsk/gskrenderer.c +++ b/gsk/gskrenderer.c @@ -691,7 +691,7 @@ gsk_renderer_create_render_node (GskRenderer *renderer) { g_return_val_if_fail (GSK_IS_RENDERER (renderer), NULL); - return gsk_render_node_new (); + return gsk_render_node_new (GSK_CONTAINER_NODE); } /*< private > diff --git a/gsk/gskrendernode.c b/gsk/gskrendernode.c index 13869e1382..aced1e42ea 100644 --- a/gsk/gskrendernode.c +++ b/gsk/gskrendernode.c @@ -82,14 +82,20 @@ gsk_render_node_finalize (GskRenderNode *self) /*< private > * gsk_render_node_new: - * @renderer: a #GskRenderer + * @type: type of the new node * * Returns: (transfer full): the newly created #GskRenderNode */ GskRenderNode * -gsk_render_node_new (void) +gsk_render_node_new (GskRenderNodeType type) { - GskRenderNode *self = g_slice_new0 (GskRenderNode); + GskRenderNode *self; + + g_return_val_if_fail (type != GSK_NOT_A_RENDER_NODE, NULL); + + self = g_slice_new0 (GskRenderNode); + + self->type = type; self->ref_count = 1; @@ -148,6 +154,24 @@ gsk_render_node_unref (GskRenderNode *node) gsk_render_node_finalize (node); } +/** + * gsk_render_node_get_node_type: + * @node: a #GskRenderNode + * + * Returns the type of the @node. + * + * Returns: the type of the #GskRenderNode + * + * Since: 3.90 + */ +GskRenderNodeType +gsk_render_node_get_node_type (GskRenderNode *node) +{ + g_return_val_if_fail (GSK_IS_RENDER_NODE (node), GSK_NOT_A_RENDER_NODE); + + return node->type; +} + /** * gsk_render_node_get_parent: * @node: a #GskRenderNode diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h index 74fdf0d7bd..5af118bedc 100644 --- a/gsk/gskrendernode.h +++ b/gsk/gskrendernode.h @@ -41,6 +41,9 @@ GskRenderNode * gsk_render_node_ref (GskRenderNode * GDK_AVAILABLE_IN_3_90 void gsk_render_node_unref (GskRenderNode *node); +GDK_AVAILABLE_IN_3_90 +GskRenderNodeType gsk_render_node_get_node_type (GskRenderNode *node); + GDK_AVAILABLE_IN_3_90 GskRenderNode * gsk_render_node_get_parent (GskRenderNode *node); GDK_AVAILABLE_IN_3_90 diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h index 43b2970ee4..6307989329 100644 --- a/gsk/gskrendernodeprivate.h +++ b/gsk/gskrendernodeprivate.h @@ -8,6 +8,8 @@ G_BEGIN_DECLS struct _GskRenderNode { + GskRenderNodeType type; + volatile int ref_count; /* The graph */ @@ -57,7 +59,7 @@ struct _GskRenderNode gboolean needs_world_matrix_update : 1; }; -GskRenderNode *gsk_render_node_new (void); +GskRenderNode *gsk_render_node_new (GskRenderNodeType type); void gsk_render_node_make_immutable (GskRenderNode *node);