Class RenderReplay
- All Implemented Interfaces:
Proxy
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 setNodeFilter(RenderReplayNodeFilter)
to filter each individual node and then run
filterNode(RenderNode) 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 RenderNode.getChildren().
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;
}
- Since:
- 4.22
-
Constructor Summary
ConstructorsConstructorDescriptionCreates a new replay object to replay nodes.RenderReplay(MemorySegment address) Create a RenderReplay proxy instance for the provided memory address. -
Method Summary
Modifier and TypeMethodDescription@Nullable RenderNodedefault_(RenderNode node) Replays the node using the default method.filterFont(Font font) Filters a font using the current filter function.@Nullable RenderNodefilterNode(RenderNode node) Replays a node using the replay's filter function.filterTexture(Texture texture) Filters a texture using the current filter function.voidfree()Frees aGskRenderReplay.static MemoryLayoutThe memory layout of the native struct.static @Nullable TypegetType()Get the GType of the RenderReplay class.voidsetFontFilter(@Nullable RenderReplayFontFilter filter) Sets a filter function to be called bydefault_(RenderNode)for nodes that contain fonts.voidsetNodeFilter(@Nullable RenderReplayNodeFilter filter) Sets the function to use as a node filter.voidsetTextureFilter(@Nullable RenderReplayTextureFilter filter) Sets a filter function to be called bydefault_(RenderNode)for nodes that contain textures.Methods inherited from class ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
RenderReplay
Create a RenderReplay proxy instance for the provided memory address.- Parameters:
address- the memory address of the native object
-
RenderReplay
public RenderReplay()Creates a new replay object to replay nodes.- Since:
- 4.22
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
default_
Replays the node using the default method.
The default method calls
filterNode(RenderNode)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.
- Parameters:
node- the node to replay- Returns:
- The replayed node
- Since:
- 4.22
-
filterFont
-
filterNode
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
nullbeing returned.If no filter node is set,
default_(RenderNode)is called instead.- Parameters:
node- the node to replay- Returns:
- The replayed node
- Since:
- 4.22
-
filterTexture
-
free
public void free()Frees aGskRenderReplay.- Since:
- 4.22
-
setFontFilter
Sets a filter function to be called by
default_(RenderNode)for nodes that contain fonts.You can call
GskRenderReplay.filterFontto filter a font yourself.- Parameters:
filter- the font filter function- Since:
- 4.22
-
setNodeFilter
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
default_(RenderNode)to have the default handler run for this node, which calls your function on its children
- Parameters:
filter- the function to call to replay nodes- Since:
- 4.22
-
-
setTextureFilter
Sets a filter function to be called by
default_(RenderNode)for nodes that contain textures.You can call
GskRenderReplay.filterTextureto filter a texture yourself.- Parameters:
filter- the texture filter function- Since:
- 4.22
-