RenderReplay


Object Hierarchy:

Gsk.RenderReplay Gsk.RenderReplay Gsk.RenderReplay

Description:

[ CCode ( free_function = "gsk_render_replay_free" , type_id = "gsk_render_replay_get_type ()" ) ]
[ Compact ]
[ Version ( since = "4.22" ) ]
public class RenderReplay

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; } ```


Namespace: Gsk
Package: gtk4

Content:

Creation methods:

Methods: