Basics
Guides
API Reference
Basics
Guides
API Reference
[38:7] extends: object
A facility to replay a [class@Gsk.RenderNode] and its children, potentially modifying them. This is a utility tool to walk a rendernode tree. The most powerful way is to provide a function via [method@Gsk.RenderReplay.set_node_filter] to filter each individual node and then run [method@Gsk.RenderReplay.filter_node] on the nodes you want to filter. If you want to just walk the node tree and extract information without any modifications, you can also use [method@Gsk.RenderNode.get_children]. Here is a little example application that redacts text in a node file: ``` #include <gtk/gtk.h> static GskRenderNode * redact_nodes (GskRenderReplay *replay, GskRenderNode *node, gpointer user_data) { GskRenderNode *result; if (gsk_render_node_get_node_type (node) == GSK_TEXT_NODE) { graphene_rect_t bounds; const GdkRGBA *color; gsk_render_node_get_bounds (node, &bounds); color = gsk_text_node_get_color (node); result = gsk_color_node_new (color, &bounds); } else { result = gsk_render_replay_default (replay, node); } return result; } int main (int argc, char *argv[]) { GFile *file; GBytes *bytes; GskRenderNode *result, *node; GskRenderReplay *replay; gtk_init (); if (argc != 3) { g_print ("usage: %s INFILE OUTFILE\n", argv[0]); return 0; } file = g_file_new_for_commandline_arg (argv[1]); bytes = g_file_load_bytes (file, NULL, NULL, NULL); g_object_unref (file); if (bytes == NULL) return 1; node = gsk_render_node_deserialize (bytes, NULL, NULL); g_bytes_unref (bytes); if (node == NULL) return 1; replay = gsk_render_replay_new (); gsk_render_replay_set_node_filter (replay, redact_nodes, NULL, NULL); result = gsk_render_replay_filter_node (replay, node); gsk_render_replay_free (replay); if (!gsk_render_node_write_to_file (result, argv[2], NULL)) return 1; gsk_render_node_unref (result); gsk_render_node_unref (node); return 0; }
#### Members
- **handleObj**
- **lib**
- **retainedCallbacks**
- **signalHandlerNames**
- **signalSetterHandlers**
#### Methods
- **GskRenderReplay** (`Handle = null`)
> Creates a new replay object to replay nodes.
- **@p** `Handle` is an optional native handle or wrapper whose handle to adopt; when the native constructor is called.
- **toNativeHandle** (`Source`)
> Normalizes a constructor argument into a raw pointer carrier. Accepts a raw NativeHandle, a raw NativeBuffer returned from `fn.call(...)`, another generated wrapper exposing `handle()`, or null. Returns null when the argument carries no pointer.
- **@p** `Source` is the raw handle, raw buffer, wrapper, or null.
- **@r** `A` raw pointer carrier or null when no pointer is present.
- **getLib** ()
> Returns the opened native library for this generated wrapper.
- **@r** `The` opened native library.
- **handle** ()
> Returns the wrapped NativeHandle.
- **@r** `The` wrapped NativeHandle.
- **isNull** ()
> Returns true when the wrapped handle is null.
- **@r** `A` bool.
- **describe** ()
> Returns a small string for debugging generated wrappers.
- **@r** `A` string.
- **FnDefault** (`object node`)
> Replays the node using the default method. The default method calls [method@Gsk.RenderReplay.filter_node] on all its child nodes and the filter functions for all its properties. If none of them are changed, it returns the passed in node. Otherwise it constructs a new node with the changed children and properties. It may not be possible to construct a new node when any of the callbacks return NULL. In that case, this function will return NULL, too.
- **@p** `node` is the node to replay.
- **@r** `The` replayed node.
- **filter\_font** (`object font`)
> Filters a font using the current filter function.
- **@p** `font` is The font to filter.
- **@r** `the` filtered font.
- **filter\_node** (`object node`)
> Replays a node using the replay's filter function. After the replay the node may be unchanged, or it may be removed, which will result in %NULL being returned. If no filter node is set, [method@Gsk.RenderReplay.default] is called instead.
- **@p** `node` is the node to replay.
- **@r** `The` replayed node.
- **filter\_texture** (`object texture`)
> Filters a texture using the current filter function.
- **@p** `texture` is The texture to filter.
- **@r** `the` filtered texture.
- **free** ()
> Frees a `GskRenderReplay`.
- **@r** `None.`
- **set\_font\_filter** (`object user_destroy`)
> Sets a filter function to be called by [method@Gsk.RenderReplay.default] for nodes that contain fonts. You can call [method@GskRenderReplay.filter_font] to filter a font yourself.
- **@p** `filter` is the font filter function.
- **@p** `user_data` is user data to pass to @filter.
- **@p** `user_destroy` is destroy notify that will be called to release the user data parameter.
- **@r** `None.`
- **set\_node\_filter** (`object user_destroy`)
> Sets the function to use as a node filter. This is the most complex function to use for replaying nodes. It can either: * keep the node and just return it unchanged * create a replacement node and return that * discard the node by returning `NULL` * call [method@Gsk.RenderReplay.default] to have the default handler run for this node, which calls your function on its children
- **@p** `filter` is the function to call to replay nodes.
- **@p** `user_data` is user data to pass to @func.
- **@p** `user_destroy` is destroy notify that will be called to release the user data parameter.
- **@r** `None.`
- **set\_texture\_filter** (`object user_destroy`)
> Sets a filter function to be called by [method@Gsk.RenderReplay.default] for nodes that contain textures. You can call [method@GskRenderReplay.filter_texture] to filter a texture yourself.
- **@p** `filter` is the texture filter function.
- **@p** `user_data` is user data to pass to @filter.
- **@p** `user_destroy` is destroy notify that will be called to release the user data parameter.
- **@r** `None.`

Aussom
Write once. Embed everywhere.
Copyright 2026 Austin Lehman. All rights reserved.