RenderReplay#
Added in version 4.22.
- class RenderReplay(**kwargs)#
A facility to replay a 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 set_node_filter
to filter each individual node and then run
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 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;
}
Constructors#
- class RenderReplay
- classmethod new() RenderReplay#
Creates a new replay object to replay nodes.
Added in version 4.22.
Methods#
- class RenderReplay
- default(node: RenderNode) RenderNode | None#
Replays the node using the default method.
The default method calls
filter_nodeon 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.
Added in version 4.22.
- Parameters:
node – the node to replay
- filter_font(font: Font) Font#
Filters a font using the current filter function.
Added in version 4.22.
- Parameters:
font – The font to filter
- filter_node(node: RenderNode) RenderNode | None#
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
Nonebeing returned.If no filter node is set,
defaultis called instead.Added in version 4.22.
- Parameters:
node – the node to replay
- filter_texture(texture: Texture) Texture#
Filters a texture using the current filter function.
Added in version 4.22.
- Parameters:
texture – The texture to filter
- set_font_filter(filter: Callable[[RenderReplay, Font, Any], Font] | None = None, user_data: Any = None) None#
Sets a filter function to be called by
defaultfor nodes that contain fonts.You can call
filter_fontto filter a font yourself.Added in version 4.22.
- Parameters:
filter – the font filter function
user_data – user data to pass to
filter
- set_node_filter(filter: Callable[[RenderReplay, RenderNode, Any], RenderNode | None] | None = None, user_data: Any = None) None#
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
NULLcall
defaultto have the default handler run for this node, which calls your function on its children
Added in version 4.22.
- Parameters:
filter – the function to call to replay nodes
user_data – user data to pass to
func
- set_texture_filter(filter: Callable[[RenderReplay, Texture, Any], Texture] | None = None, user_data: Any = None) None#
Sets a filter function to be called by
defaultfor nodes that contain textures.You can call
filter_textureto filter a texture yourself.Added in version 4.22.
- Parameters:
filter – the texture filter function
user_data – user data to pass to
filter