* Returns: (transfer full): the `GskRenderNode` with an additional reference
*/
GskRenderNode *
-gsk_render_node_ref (GskRenderNode *node)
+(gsk_render_node_ref) (GskRenderNode *node)
{
g_return_val_if_fail (GSK_IS_RENDER_NODE (node), NULL);
- g_atomic_ref_count_inc (&node->ref_count);
+ return _gsk_render_node_ref (node);
+}
- return node;
+void
+_gsk_render_node_unref (GskRenderNode *node)
+{
+ if G_UNLIKELY (g_atomic_ref_count_dec (&node->ref_count))
+ GSK_RENDER_NODE_GET_CLASS (node)->finalize (node);
}
+
/**
* gsk_render_node_unref:
* @node: (transfer full): a `GskRenderNode`
* freed.
*/
void
-gsk_render_node_unref (GskRenderNode *node)
+(gsk_render_node_unref) (GskRenderNode *node)
{
g_return_if_fail (GSK_IS_RENDER_NODE (node));
- if (g_atomic_ref_count_dec (&node->ref_count))
- GSK_RENDER_NODE_GET_CLASS (node)->finalize (node);
+ _gsk_render_node_unref (node);
}
gpointer gsk_render_node_alloc (GskRenderNodeType node_type);
+void _gsk_render_node_unref (GskRenderNode *node);
+
gboolean gsk_render_node_can_diff (const GskRenderNode *node1,
const GskRenderNode *node2) G_GNUC_PURE;
void gsk_render_node_diff (GskRenderNode *node1,
gboolean gsk_render_node_use_offscreen_for_opacity (const GskRenderNode *node);
+#define gsk_render_node_ref(node) _gsk_render_node_ref(node)
+#define gsk_render_node_unref(node) _gsk_render_node_unref(node)
+
+static inline GskRenderNode *
+_gsk_render_node_ref (GskRenderNode *node)
+{
+ g_atomic_ref_count_inc (&node->ref_count);
+ return node;
+}
G_END_DECLS