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_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.

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 None being returned.

If no filter node is set, default is 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

free() None#

Frees a GskRenderReplay.

Added in version 4.22.

set_font_filter(filter: Callable[[RenderReplay, Font, Any], Font] | None = None, user_data: Any = None) None#

Sets a filter function to be called by default for nodes that contain fonts.

You can call filter_font to 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 NULL

  • call default to 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 default for nodes that contain textures.

You can call filter_texture to filter a texture yourself.

Added in version 4.22.

Parameters:
  • filter – the texture filter function

  • user_data – user data to pass to filter