## GskRenderNode GskRenderNode — Simple scene graph element |

## Functions

GskRenderNode * | gsk_render_node_ref ()
void | gsk_render_node_unref ()
GskRenderNodeType | gsk_render_node_get_node_type ()
void | gsk_render_node_draw ()
void | (*GskParseErrorFunc) ()
GBytes * | gsk_render_node_serialize ()
GskRenderNode * | gsk_render_node_deserialize ()
gboolean | gsk_render_node_write_to_file ()
void | gsk_render_node_get_bounds ()
GskRenderNode * | gsk_color_node_new ()
const GdkRGBA * | gsk_color_node_peek_color ()
GskRenderNode * | gsk_texture_node_new ()
GdkTexture * | gsk_texture_node_get_texture ()
GskRenderNode * | gsk_linear_gradient_node_new ()
const graphene_point_t * | gsk_linear_gradient_node_peek_start ()
const graphene_point_t * | gsk_linear_gradient_node_peek_end ()
gsize | gsk_linear_gradient_node_get_n_color_stops ()
const GskColorStop * | gsk_linear_gradient_node_peek_color_stops ()
GskRenderNode * | gsk_repeating_linear_gradient_node_new ()
GskRenderNode * | gsk_border_node_new ()
const GskRoundedRect * | gsk_border_node_peek_outline ()
const float * | gsk_border_node_peek_widths ()
const GdkRGBA * | gsk_border_node_peek_colors ()
GskRenderNode * | gsk_inset_shadow_node_new ()
const GskRoundedRect * | gsk_inset_shadow_node_peek_outline ()
const GdkRGBA * | gsk_inset_shadow_node_peek_color ()
float | gsk_inset_shadow_node_get_dx ()
float | gsk_inset_shadow_node_get_dy ()
float | gsk_inset_shadow_node_get_spread ()
float | gsk_inset_shadow_node_get_blur_radius ()
GskRenderNode * | gsk_outset_shadow_node_new ()
const GskRoundedRect * | gsk_outset_shadow_node_peek_outline ()
const GdkRGBA * | gsk_outset_shadow_node_peek_color ()
float | gsk_outset_shadow_node_get_dx ()
float | gsk_outset_shadow_node_get_dy ()
float | gsk_outset_shadow_node_get_spread ()
float | gsk_outset_shadow_node_get_blur_radius ()
GskRenderNode * | gsk_cairo_node_new ()
cairo_t * | gsk_cairo_node_get_draw_context ()
cairo_surface_t * | gsk_cairo_node_peek_surface ()
GskRenderNode * | gsk_container_node_new ()
guint | gsk_container_node_get_n_children ()
GskRenderNode * | gsk_container_node_get_child ()
GskRenderNode * | gsk_transform_node_new ()
GskRenderNode * | gsk_transform_node_get_child ()
GskTransform * | gsk_transform_node_get_transform ()
GskRenderNode * | gsk_opacity_node_new ()
GskRenderNode * | gsk_opacity_node_get_child ()
float | gsk_opacity_node_get_opacity ()
GskRenderNode * | gsk_color_matrix_node_new ()
GskRenderNode * | gsk_color_matrix_node_get_child ()
const graphene_matrix_t * | gsk_color_matrix_node_peek_color_matrix ()
const graphene_vec4_t * | gsk_color_matrix_node_peek_color_offset ()
GskRenderNode * | gsk_repeat_node_new ()
GskRenderNode * | gsk_repeat_node_get_child ()
const graphene_rect_t * | gsk_repeat_node_peek_child_bounds ()
GskRenderNode * | gsk_clip_node_new ()
GskRenderNode * | gsk_clip_node_get_child ()
const graphene_rect_t * | gsk_clip_node_peek_clip ()
GskRenderNode * | gsk_rounded_clip_node_new ()
GskRenderNode * | gsk_rounded_clip_node_get_child ()
const GskRoundedRect * | gsk_rounded_clip_node_peek_clip ()
GskRenderNode * | gsk_shadow_node_new ()
const GskShadow * | gsk_shadow_node_peek_shadow ()
gsize | gsk_shadow_node_get_n_shadows ()
GskRenderNode * | gsk_shadow_node_get_child ()
GskRenderNode * | gsk_blend_node_new ()
GskRenderNode * | gsk_blend_node_get_bottom_child ()
GskRenderNode * | gsk_blend_node_get_top_child ()
GskBlendMode | gsk_blend_node_get_blend_mode ()
GskRenderNode * | gsk_cross_fade_node_new ()
GskRenderNode * | gsk_cross_fade_node_get_start_child ()
GskRenderNode * | gsk_cross_fade_node_get_end_child ()
float | gsk_cross_fade_node_get_progress ()
GskRenderNode * | gsk_text_node_new ()
PangoFont * | gsk_text_node_peek_font ()
const PangoGlyphInfo * | gsk_text_node_peek_glyphs ()
const GdkRGBA * | gsk_text_node_peek_color ()
gboolean | gsk_text_node_has_color_glyphs ()
guint | gsk_text_node_get_num_glyphs ()
const graphene_point_t * | gsk_text_node_get_offset ()
GskRenderNode * | gsk_blur_node_new ()
GskRenderNode * | gsk_blur_node_get_child ()
float | gsk_blur_node_get_radius ()
GskRenderNode * | gsk_debug_node_new ()
GskRenderNode * | gsk_debug_node_get_child ()
const char * | gsk_debug_node_get_message ()

## Types and Values

| GskRenderNode
| GskBlendNode
| GskBlurNode
| GskBorderNode
| GskCairoNode
| GskClipNode
| GskColorMatrixNode
| GskColorNode
| GskContainerNode
| GskCrossFadeNode
| GskDebugNode
| GskInsetShadowNode
| GskLinearGradientNode
| GskOpacityNode
| GskOutsetShadowNode
| GskRepeatingLinearGradientNode
| GskRepeatNode
| GskRoundedClipNode
| GskShadowNode
| GskTextNode
| GskTextureNode
| GskTransformNode
enum | GskRenderNodeType
enum | GskSerializationError
enum | GskScalingFilter
struct | GskColorStop
struct | GskShadow
enum | GskBlendMode

## Object Hierarchy

        GskRenderNode

## Description

GskRenderNode is the basic block in a scene graph to be rendered using GskRenderer.

Each node has a parent, except the top-level node; each node may have children nodes.

Each node has an associated drawing surface, which has the size of the rectangle set using `gsk_render_node_set_bounds()`.

Render nodes are meant to be transient; once they have been associated to a GskRenderer it's safe to release any reference you have on them. All GskRenderNodes are immutable, you can only specify their properties during construction.

## Functions

### gsk_render_node_ref ()

    GskRenderNode *
    gsk_render_node_ref (GskRenderNode *node);

Acquires a reference on the given GskRenderNode.

#### Parameters

node | a GskRenderNode |

#### Returns

the GskRenderNode with an additional reference.

[transfer full]

### gsk_render_node_unref ()

    void
    gsk_render_node_unref (GskRenderNode *node);

Releases a reference on the given GskRenderNode.

If the reference was the last, the resources associated to the `node` are freed.

#### Parameters

node | a GskRenderNode. | [transfer full]

### gsk_render_node_get_node_type ()

    GskRenderNodeType
    gsk_render_node_get_node_type (GskRenderNode *node);

Returns the type of the `node` .

#### Parameters

node | a GskRenderNode |

#### Returns

the type of the GskRenderNode

### gsk_render_node_draw ()

    void
    gsk_render_node_draw (GskRenderNode *node,
                          cairo_t *cr);

Draw the contents of `node` to the given cairo context.

Typically, you'll use this function to implement fallback rendering of GskRenderNodes on an intermediate Cairo context, instead of using the drawing context associated to a GdkSurface's rendering buffer.

For advanced nodes that cannot be supported using Cairo, in particular for nodes doing 3D operations, this function may fail.

#### Parameters

node | a GskRenderNode |
cr | cairo context to draw to |

### GskParseErrorFunc ()

    void
    (*GskParseErrorFunc) (const GtkCssSection *section,
                          const GError *error,
                          gpointer user_data);

The type of callback that is called when a parse error occurs during deserialization of node data.

#### Parameters

section | the GtkCssSection where the error occurred |
error | the error |
user_data | user data |

### gsk_render_node_serialize ()

    GBytes *
    gsk_render_node_serialize (GskRenderNode *node);

Serializes the `node` for later deserialization via `gsk_render_node_deserialize()`. No guarantees are made about the format used other than that the same version of GTK+ will be able to deserialize the result of a call to `gsk_render_node_serialize()` and `gsk_render_node_deserialize()` will correctly reject files it cannot open that were created with previous versions of GTK+.

The intended use of this functions is testing, benchmarking and debugging. The format is not meant as a permanent storage format.

#### Parameters

node | a GskRenderNode |

#### Returns

a GBytes representing the node.

### gsk_render_node_deserialize ()

    GskRenderNode *
    gsk_render_node_deserialize (GBytes *bytes,
                                 GskParseErrorFunc error_func,
                                 gpointer user_data);

Loads data previously created via `gsk_render_node_serialize()`. For a discussion of the supported format, see that function.

#### Parameters

bytes | the bytes containing the data |
error_func | Callback on parsing errors or `NULL`. | [nullable][scope call]
user_data | user_data for `error_func` . | [closure error_func]

#### Returns

a new GskRenderNode or `NULL` on error.

[nullable][transfer full]

### gsk_render_node_write_to_file ()

    gboolean
    gsk_render_node_write_to_file (GskRenderNode *node,
                                   const char *filename,
                                   GError **error);

This function is equivalent to calling `gsk_render_node_serialize()` followed by `g_file_set_contents()`. See those two functions for details on the arguments.

It is mostly intended for use inside a debugger to quickly dump a render node to a file for later inspection.

#### Parameters

node | a GskRenderNode |
filename | the file to save it to. |
error | Return location for a potential error |

#### Returns

`TRUE` if saving was successful

### gsk_render_node_get_bounds ()

    void
    gsk_render_node_get_bounds (GskRenderNode *node,
                                graphene_rect_t *bounds);

Retrieves the boundaries of the `node` . The node will not draw outside of its boundaries.

#### Parameters

node | a GskRenderNode |
bounds | return location for the boundaries. | [out caller-allocates]

### gsk_color_node_new ()

    GskRenderNode *
    gsk_color_node_new (const GdkRGBA *rgba,
                        const graphene_rect_t *bounds);

Creates a GskRenderNode that will render the color specified by `rgba` into the area given by `bounds` .

#### Parameters

rgba | a GdkRGBA specifying a color |
bounds | the rectangle to render the color into |

#### Returns

A new GskRenderNode.

[transfer full][type GskColorNode]

### gsk_color_node_peek_color ()

    const GdkRGBA *
    gsk_color_node_peek_color (GskRenderNode *node);

Retrieves the color of the given `node` .

#### Parameters

node | a GskColorNode. | [type GskColorNode]

#### Returns

the color of the node.

[transfer none]

### gsk_texture_node_new ()

    GskRenderNode *
    gsk_texture_node_new (GdkTexture *texture,
                          const graphene_rect_t *bounds);

Creates a GskRenderNode that will render the given `texture` into the area given by `bounds` .

#### Parameters

texture | the GdkTexture |
bounds | the rectangle to render the texture into |

#### Returns

A new GskRenderNode.

[transfer full][type GskTextureNode]

### gsk_texture_node_get_texture ()

    GdkTexture *
    gsk_texture_node_get_texture (GskRenderNode *node);

Retrieves the GdkTexture used when creating this GskRenderNode.

#### Parameters

node | a GskRenderNode of type `GSK_TEXTURE_NODE`. | [type GskTextureNode]

#### Returns

the GdkTexture.

[transfer none]

### gsk_linear_gradient_node_new ()

    GskRenderNode *
    gsk_linear_gradient_node_new (const graphene_rect_t *bounds,
                                  const graphene_point_t *start,
                                  const graphene_point_t *end,
                                  const GskColorStop *color_stops,
                                  gsize n_color_stops);

Creates a GskRenderNode that will create a linear gradient from the given points and color stops, and render that into the area given by `bounds` .

#### Parameters

bounds | the rectangle to render the linear gradient into |
start | the point at which the linear gradient will begin |
end | the point at which the linear gradient will finish |
color_stops | a pointer to an array of GskColorStop defining the gradient. | [array length=n_color_stops]
n_color_stops | the number of elements in `color_stops` |

#### Returns

A new GskRenderNode.

[transfer full][type GskLinearGradientNode]

### gsk_linear_gradient_node_peek_start ()

    const graphene_point_t *
    gsk_linear_gradient_node_peek_start (GskRenderNode *node);

Retrieves the initial point of the linear gradient.

#### Parameters

node | a GskRenderNode for a linear gradient. | [type GskLinearGradientNode]

#### Returns

the initial point.

[transfer none]

### gsk_linear_gradient_node_peek_end ()

    const graphene_point_t *
    gsk_linear_gradient_node_peek_end (GskRenderNode *node);

Retrieves the final point of the linear gradient.

#### Parameters

node | a GskRenderNode for a linear gradient. | [type GskLinearGradientNode]

#### Returns

the final point.

[transfer none]

### gsk_linear_gradient_node_get_n_color_stops ()

    gsize
    gsk_linear_gradient_node_get_n_color_stops
                                   (GskRenderNode *node);

Retrieves the number of color stops in the gradient.

#### Parameters

node | a GskRenderNode for a linear gradient. | [type GskLinearGradientNode]

#### Returns

the number of color stops

### gsk_linear_gradient_node_peek_color_stops ()

    const GskColorStop *
    gsk_linear_gradient_node_peek_color_stops
                                   (GskRenderNode *node,
                                    gsize *n_stops);

Retrieves the color stops in the gradient.

#### Parameters

node | a GskRenderNode for a linear gradient. | [type GskLinearGradientNode]
n_stops | the number of color stops in the returned array. | [out][optional]

#### Returns

the color stops in the gradient.

[array length=n_stops]

### gsk_repeating_linear_gradient_node_new ()

    GskRenderNode *
    gsk_repeating_linear_gradient_node_new
                                   (const graphene_rect_t *bounds,
                                    const graphene_point_t *start,
                                    const graphene_point_t *end,
                                    const GskColorStop *color_stops,
                                    gsize n_color_stops);

Creates a GskRenderNode that will create a repeating linear gradient from the given points and color stops, and render that into the area given by `bounds` .

#### Parameters

bounds | the rectangle to render the linear gradient into |
start | the point at which the linear gradient will begin |
end | the point at which the linear gradient will finish |
color_stops | a pointer to an array of GskColorStop defining the gradient. | [array length=n_color_stops]
n_color_stops | the number of elements in `color_stops` |

#### Returns

A new GskRenderNode.

[transfer full][type GskRepeatingLinearGradientNode]

### gsk_border_node_new ()

    GskRenderNode *
    gsk_border_node_new (const GskRoundedRect *outline,
                         const float border_width[4],
                         const GdkRGBA border_color[4]);

Creates a GskRenderNode that will stroke a border rectangle inside the given `outline` . The 4 sides of the border can have different widths and colors.

#### Parameters

outline | a GskRoundedRect describing the outline of the border |
border_width | the stroke width of the border on the top, right, bottom and left side respectively. | [array fixed-size=4]
border_color | the color used on the top, right, bottom and left side. | [array fixed-size=4]

#### Returns

A new GskRenderNode.

[transfer full][type GskBorderNode]

### gsk_border_node_peek_outline ()

    const GskRoundedRect *
    gsk_border_node_peek_outline (GskRenderNode *node);

Retrieves the outline of the border.

#### Parameters

node | a GskRenderNode for a border. | [type GskBorderNode]

#### Returns

the outline of the border

### gsk_border_node_peek_widths ()

    const float *
    gsk_border_node_peek_widths (GskRenderNode *node);

Retrieves the stroke widths of the border.

#### Parameters

node | a GskRenderNode for a border. | [type GskBorderNode]

#### Returns

an array of 4 floats for the top, right, bottom and left stroke width of the border.

[transfer none]

### gsk_border_node_peek_colors ()

    const GdkRGBA *
    gsk_border_node_peek_colors (GskRenderNode *node);

Retrieves the colors of the border.

#### Parameters

node | a GskRenderNode for a border. | [type GskBorderNode]

#### Returns

an array of 4 GdkRGBA structs for the top, right, bottom and left color of the border.

[transfer none]

### gsk_inset_shadow_node_new ()

    GskRenderNode *
    gsk_inset_shadow_node_new (const GskRoundedRect *outline,
                               const GdkRGBA *color,
                               float dx,
                               float dy,
                               float spread,
                               float blur_radius);

Creates a GskRenderNode that will render an inset shadow into the box given by `outline` .

#### Parameters

outline | outline of the region containing the shadow |
color | color of the shadow |
dx | horizontal offset of shadow |
dy | vertical offset of shadow |
spread | how far the shadow spreads towards the inside |
blur_radius | how much blur to apply to the shadow |

#### Returns

A new GskRenderNode.

[transfer full][type GskInsetShadowNode]

### gsk_inset_shadow_node_peek_outline ()

    const GskRoundedRect *
    gsk_inset_shadow_node_peek_outline (GskRenderNode *node);

Retrieves the outline rectangle of the inset shadow.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

a rounded rectangle.

[transfer none]

### gsk_inset_shadow_node_peek_color ()

    const GdkRGBA *
    gsk_inset_shadow_node_peek_color (GskRenderNode *node);

Retrieves the color of the inset shadow.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

the color of the shadow.

[transfer none]

### gsk_inset_shadow_node_get_dx ()

    float
    gsk_inset_shadow_node_get_dx (GskRenderNode *node);

Retrieves the horizontal offset of the inset shadow.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

an offset, in pixels

### gsk_inset_shadow_node_get_dy ()

    float
    gsk_inset_shadow_node_get_dy (GskRenderNode *node);

Retrieves the vertical offset of the inset shadow.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

an offset, in pixels

### gsk_inset_shadow_node_get_spread ()

    float
    gsk_inset_shadow_node_get_spread (GskRenderNode *node);

Retrieves how much the shadow spreads inwards.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

the size of the shadow, in pixels

### gsk_inset_shadow_node_get_blur_radius ()

    float
    gsk_inset_shadow_node_get_blur_radius (GskRenderNode *node);

Retrieves the blur radius to apply to the shadow.

#### Parameters

node | a GskRenderNode for an inset shadow. | [type GskInsetShadowNode]

#### Returns

the blur radius, in pixels

### gsk_outset_shadow_node_new ()

    GskRenderNode *
    gsk_outset_shadow_node_new (const GskRoundedRect *outline,
                                const GdkRGBA *color,
                                float dx,
                                float dy,
                                float spread,
                                float blur_radius);

Creates a GskRenderNode that will render an outset shadow around the box given by `outline` .

#### Parameters

outline | outline of the region surrounded by shadow |
color | color of the shadow |
dx | horizontal offset of shadow |
dy | vertical offset of shadow |
spread | how far the shadow spreads towards the inside |
blur_radius | how much blur to apply to the shadow |

#### Returns

A new GskRenderNode.

[transfer full][type GskOutsetShadowNode]

### gsk_outset_shadow_node_peek_outline ()

    const GskRoundedRect *
    gsk_outset_shadow_node_peek_outline (GskRenderNode *node);

Retrieves the outline rectangle of the outset shadow.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

a rounded rectangle.

[transfer none]

### gsk_outset_shadow_node_peek_color ()

    const GdkRGBA *
    gsk_outset_shadow_node_peek_color (GskRenderNode *node);

Retrieves the color of the outset shadow.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

a color.

[transfer none]

### gsk_outset_shadow_node_get_dx ()

    float
    gsk_outset_shadow_node_get_dx (GskRenderNode *node);

Retrieves the horizontal offset of the outset shadow.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

an offset, in pixels

### gsk_outset_shadow_node_get_dy ()

    float
    gsk_outset_shadow_node_get_dy (GskRenderNode *node);

Retrieves the vertical offset of the outset shadow.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

an offset, in pixels

### gsk_outset_shadow_node_get_spread ()

    float
    gsk_outset_shadow_node_get_spread (GskRenderNode *node);

Retrieves how much the shadow spreads outwards.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

the size of the shadow, in pixels

### gsk_outset_shadow_node_get_blur_radius ()

    float
    gsk_outset_shadow_node_get_blur_radius
                                   (GskRenderNode *node);

Retrieves the blur radius of the shadow.

#### Parameters

node | a GskRenderNode for an outset shadow. | [type GskOutsetShadowNode]

#### Returns

the blur radius, in pixels

### gsk_cairo_node_new ()

    GskRenderNode *
    gsk_cairo_node_new (const graphene_rect_t *bounds);

Creates a GskRenderNode that will render a cairo surface into the area given by `bounds` . You can draw to the cairo surface using `gsk_cairo_node_get_draw_context()`

#### Parameters

bounds | the rectangle to render to |

#### Returns

A new GskRenderNode.

[transfer full][type GskCairoNode]

### gsk_cairo_node_get_draw_context ()

    cairo_t *
    gsk_cairo_node_get_draw_context (GskRenderNode *node);

Creates a Cairo context for drawing using the surface associated to the render node.

If no surface exists yet, a surface will be created optimized for rendering to `renderer` .

#### Parameters

node | a GskRenderNode for a Cairo surface. | [type GskCairoNode]

#### Returns

a Cairo context used for drawing; use `cairo_destroy()` when done drawing.

[transfer full]

### gsk_cairo_node_peek_surface ()

    cairo_surface_t *
    gsk_cairo_node_peek_surface (GskRenderNode *node);

Retrieves the Cairo surface used by the render node.

#### Parameters

node | a GskRenderNode for a Cairo surface. | [type GskCairoNode]

#### Returns

a Cairo surface.

[transfer none]

### gsk_container_node_new ()

    GskRenderNode *
    gsk_container_node_new (GskRenderNode **children,
                            guint n_children);

Creates a new GskRenderNode instance for holding the given `children` . The new node will acquire a reference to each of the children.

#### Parameters

children | The children of the node. | [array length=n_children][transfer none]
n_children | Number of children in the `children` array |

#### Returns

the new GskRenderNode.

[transfer full][type GskContainerNode]

### gsk_container_node_get_n_children ()

    guint
    gsk_container_node_get_n_children (GskRenderNode *node);

Retrieves the number of direct children of `node` .

#### Parameters

node | a container GskRenderNode. | [type GskContainerNode]

#### Returns

the number of children of the GskRenderNode

### gsk_container_node_get_child ()

    GskRenderNode *
    gsk_container_node_get_child (GskRenderNode *node,
                                  guint idx);

Gets one of the children of `container` .

#### Parameters

node | a container GskRenderNode. | [type GskContainerNode]
idx | the position of the child to get |

#### Returns

the `idx` 'th child of `container` .

[transfer none]

### gsk_transform_node_new ()

    GskRenderNode *
    gsk_transform_node_new (GskRenderNode *child,
                            GskTransform *transform);

Creates a GskRenderNode that will transform the given `child` with the given `transform` .

#### Parameters

child | The node to transform |
transform | The transform to apply. | [transfer none]

#### Returns

A new GskRenderNode.

[transfer full][type GskTransformNode]

### gsk_transform_node_get_child ()

    GskRenderNode *
    gsk_transform_node_get_child (GskRenderNode *node);

Gets the child node that is getting transformed by the given `node` .

#### Parameters

node | a GskRenderNode for a transform. | [type GskTransformNode]

#### Returns

The child that is getting transformed.

[transfer none]

### gsk_transform_node_get_transform ()

    GskTransform *
    gsk_transform_node_get_transform (GskRenderNode *node);

Retrieves the GskTransform used by the `node` .

#### Parameters

node | a GskRenderNode for a transform. | [type GskTransformNode]

#### Returns

a GskTransform.

[transfer none]

### gsk_opacity_node_new ()

    GskRenderNode *
    gsk_opacity_node_new (GskRenderNode *child,
                          float opacity);

Creates a GskRenderNode that will drawn the `child` with reduced `opacity` .

#### Parameters

child | The node to draw |
opacity | The opacity to apply |

#### Returns

A new GskRenderNode.

[transfer full][type GskOpacityNode]

### gsk_opacity_node_get_child ()

    GskRenderNode *
    gsk_opacity_node_get_child (GskRenderNode *node);

Gets the child node that is getting opacityed by the given `node` .

#### Parameters

node | a GskRenderNode for an opacity. | [type GskOpacityNode]

#### Returns

The child that is getting opacityed.

[transfer none]

### gsk_opacity_node_get_opacity ()

    float
    gsk_opacity_node_get_opacity (GskRenderNode *node);

Gets the transparency factor for an opacity node.

#### Parameters

node | a GskRenderNode for an opacity. | [type GskOpacityNode]

#### Returns

the opacity factor

### gsk_color_matrix_node_new ()

    GskRenderNode *
    gsk_color_matrix_node_new (GskRenderNode *child,
                               const graphene_matrix_t *color_matrix,
                               const graphene_vec4_t *color_offset);

Creates a GskRenderNode that will drawn the `child` with reduced `color_matrix` .

In particular, the node will transform the operation

    1
    pixel = color_matrix * pixel + color_offset

for every pixel.

#### Parameters

child | The node to draw |
color_matrix | The matrix to apply |
color_offset | Values to add to the color |

#### Returns

A new GskRenderNode.

[transfer full][type GskColorMatrixNode]

### gsk_color_matrix_node_get_child ()

    GskRenderNode *
    gsk_color_matrix_node_get_child (GskRenderNode *node);

Gets the child node that is getting its colors modified by the given `node` .

#### Parameters

node | a color matrix GskRenderNode. | [type GskColorMatrixNode]

#### Returns

The child that is getting its colors modified.

[transfer none]

### gsk_color_matrix_node_peek_color_matrix ()

    const graphene_matrix_t *
    gsk_color_matrix_node_peek_color_matrix
                                   (GskRenderNode *node);

Retrieves the color matrix used by the `node` .

#### Parameters

node | a color matrix GskRenderNode. | [type GskColorMatrixNode]

#### Returns

a 4x4 color matrix

### gsk_color_matrix_node_peek_color_offset ()

    const graphene_vec4_t *
    gsk_color_matrix_node_peek_color_offset
                                   (GskRenderNode *node);

Retrieves the color offset used by the `node` .

#### Parameters

node | a color matrix GskRenderNode. | [type GskColorMatrixNode]

#### Returns

a color vector

### gsk_repeat_node_new ()

    GskRenderNode *
    gsk_repeat_node_new (const graphene_rect_t *bounds,
                         GskRenderNode *child,
                         const graphene_rect_t *child_bounds);

Creates a GskRenderNode that will repeat the drawing of `child` across the given `bounds` .

#### Parameters

bounds | The bounds of the area to be painted |
child | The child to repeat |
child_bounds | The area of the child to repeat or `NULL` to use the child's bounds. | [allow-none]

#### Returns

A new GskRenderNode.

[transfer full][type GskRepeatNode]

### gsk_repeat_node_get_child ()

    GskRenderNode *
    gsk_repeat_node_get_child (GskRenderNode *node);

Retrieves the child of `node` .

#### Parameters

node | a repeat GskRenderNode. | [type GskRepeatNode]

#### Returns

a GskRenderNode.

[transfer none]

### gsk_repeat_node_peek_child_bounds ()

    const graphene_rect_t *
    gsk_repeat_node_peek_child_bounds (GskRenderNode *node);

Retrieves the bounding rectangle of the child of `node` .

#### Parameters

node | a repeat GskRenderNode. | [type GskRepeatNode]

#### Returns

a bounding rectangle.

[transfer none]

### gsk_clip_node_new ()

    GskRenderNode *
    gsk_clip_node_new (GskRenderNode *child,
                       const graphene_rect_t *clip);

Creates a GskRenderNode that will clip the `child` to the area given by `clip` .

#### Parameters

child | The node to draw |
clip | The clip to apply |

#### Returns

A new GskRenderNode.

[transfer full][type GskClipNode]

### gsk_clip_node_get_child ()

    GskRenderNode *
    gsk_clip_node_get_child (GskRenderNode *node);

Gets the child node that is getting clipped by the given `node` .

#### Parameters

node | a clip `GskRenderNode` . | [type GskClipNode]

#### Returns

The child that is getting clipped.

[transfer none]

### gsk_clip_node_peek_clip ()

    const graphene_rect_t *
    gsk_clip_node_peek_clip (GskRenderNode *node);

Retrieves the clip rectangle for `node` .

#### Parameters

node | a GskClipNode. | [type GskClipNode]

#### Returns

a clip rectangle

### gsk_rounded_clip_node_new ()

    GskRenderNode *
    gsk_rounded_clip_node_new (GskRenderNode *child,
                               const GskRoundedRect *clip);

Creates a GskRenderNode that will clip the `child` to the area given by `clip` .

#### Parameters

child | The node to draw |
clip | The clip to apply |

#### Returns

A new GskRenderNode.

[transfer none][type GskRoundedClipNode]

### gsk_rounded_clip_node_get_child ()

    GskRenderNode *
    gsk_rounded_clip_node_get_child (GskRenderNode *node);

Gets the child node that is getting clipped by the given `node` .

#### Parameters

node | a rounded clip GskRenderNode. | [type GskRoundedClipNode]

#### Returns

The child that is getting clipped.

[transfer none]

### gsk_rounded_clip_node_peek_clip ()

    const GskRoundedRect *
    gsk_rounded_clip_node_peek_clip (GskRenderNode *node);

Retrievs the rounded rectangle used to clip the contents of the `node` .

#### Parameters

node | a rounded clip GskRenderNode. | [type GskRoundedClipNode]

#### Returns

a rounded rectangle.

[transfer none]

### gsk_shadow_node_new ()

    GskRenderNode *
    gsk_shadow_node_new (GskRenderNode *child,
                         const GskShadow *shadows,
                         gsize n_shadows);

Creates a GskRenderNode that will draw a `child` with the given `shadows` below it.

#### Parameters

child | The node to draw |
shadows | The shadows to apply. | [array length=n_shadows]
n_shadows | number of entries in the `shadows` array |

#### Returns

A new GskRenderNode.

[transfer full][type GskShadowNode]

### gsk_shadow_node_peek_shadow ()

    const GskShadow *
    gsk_shadow_node_peek_shadow (GskRenderNode *node,
                                 gsize i);

Retrieves the shadow data at the given index `i` .

#### Parameters

node | a shadow GskRenderNode. | [type GskShadowNode]
i | the given index |

#### Returns

the shadow data.

[transfer none]

### gsk_shadow_node_get_n_shadows ()

    gsize
    gsk_shadow_node_get_n_shadows (GskRenderNode *node);

Retrieves the number of shadows in the `node` .

#### Parameters

node | a shadow GskRenderNode. | [type GskShadowNode]

#### Returns

the number of shadows.

### gsk_shadow_node_get_child ()

    GskRenderNode *
    gsk_shadow_node_get_child (GskRenderNode *node);

Retrieves the child GskRenderNode of the shadow `node` .

#### Parameters

node | a shadow GskRenderNode. | [type GskShadowNode]

#### Returns

the child render node.

[transfer none]

### gsk_blend_node_new ()

    GskRenderNode *
    gsk_blend_node_new (GskRenderNode *bottom,
                        GskRenderNode *top,
                        GskBlendMode blend_mode);

Creates a GskRenderNode that will use `blend_mode` to blend the `top` node onto the `bottom` node.

#### Parameters

bottom | The bottom node to be drawn |
top | The node to be blended onto the `bottom` node |
blend_mode | The blend mode to use |

#### Returns

A new GskRenderNode.

[transfer full][type GskBlendNode]

### gsk_blend_node_get_bottom_child ()

    GskRenderNode *
    gsk_blend_node_get_bottom_child (GskRenderNode *node);

Retrieves the bottom GskRenderNode child of the `node` .

#### Parameters

node | a blending GskRenderNode. | [type GskBlendNode]

#### Returns

the bottom child node.

[transfer none]

### gsk_blend_node_get_top_child ()

    GskRenderNode *
    gsk_blend_node_get_top_child (GskRenderNode *node);

Retrieves the top GskRenderNode child of the `node` .

#### Parameters

node | a blending GskRenderNode. | [type GskBlendNode]

#### Returns

the top child node.

[transfer none]

### gsk_blend_node_get_blend_mode ()

    GskBlendMode
    gsk_blend_node_get_blend_mode (GskRenderNode *node);

Retrieves the blend mode used by `node` .

#### Parameters

node | a blending GskRenderNode. | [type GskBlendNode]

#### Returns

the blend mode

### gsk_cross_fade_node_new ()

    GskRenderNode *
    gsk_cross_fade_node_new (GskRenderNode *start,
                             GskRenderNode *end,
                             float progress);

Creates a GskRenderNode that will do a cross-fade between `start` and `end` .

#### Parameters

start | The start node to be drawn |
end | The node to be cross_fadeed onto the `start` node |
progress | How far the fade has progressed from start to end. The value will be clamped to the range [0 ... 1] |

#### Returns

A new GskRenderNode.

[transfer full][type GskCrossFadeNode]

### gsk_cross_fade_node_get_start_child ()

    GskRenderNode *
    gsk_cross_fade_node_get_start_child (GskRenderNode *node);

Retrieves the child GskRenderNode at the beginning of the cross-fade.

#### Parameters

node | a cross-fading GskRenderNode. | [type GskCrossFadeNode]

#### Returns

a GskRenderNode.

[transfer none]

### gsk_cross_fade_node_get_end_child ()

    GskRenderNode *
    gsk_cross_fade_node_get_end_child (GskRenderNode *node);

Retrieves the child GskRenderNode at the end of the cross-fade.

#### Parameters

node | a cross-fading GskRenderNode. | [type GskCrossFadeNode]

#### Returns

a GskRenderNode.

[transfer none]

### gsk_cross_fade_node_get_progress ()

    float
    gsk_cross_fade_node_get_progress (GskRenderNode *node);

Retrieves the progress value of the cross fade.

#### Parameters

node | a cross-fading GskRenderNode. | [type GskCrossFadeNode]

#### Returns

the progress value, between 0 and 1

### gsk_text_node_new ()

    GskRenderNode *
    gsk_text_node_new (PangoFont *font,
                       PangoGlyphString *glyphs,
                       const GdkRGBA *color,
                       const graphene_point_t *offset);

Creates a render node that renders the given glyphs, Note that `color` may not be used if the font contains color glyphs.

#### Parameters

font | the PangoFont containing the glyphs |
glyphs | the PangoGlyphString to render |
color | the foreground color to render with |
offset | offset of the baseline |

#### Returns

a new GskRenderNode.

[nullable][transfer full][type GskTextNode]

### gsk_text_node_peek_font ()

    PangoFont *
    gsk_text_node_peek_font (GskRenderNode *node);

Returns the font used by the text `node` .

#### Parameters

node | The GskRenderNode |

#### Returns

the font.

[transfer none]

### gsk_text_node_peek_glyphs ()

    const PangoGlyphInfo *
    gsk_text_node_peek_glyphs (GskRenderNode *node,
                               guint *n_glyphs);

Retrieves the glyph information in the `node` .

#### Parameters

node | a text GskRenderNode. | [type GskTextNode]
n_glyphs | the number of glyphs returned. | [out][optional]

#### Returns

the glyph information.

[transfer none][array length=n_glyphs]

### gsk_text_node_peek_color ()

    const GdkRGBA *
    gsk_text_node_peek_color (GskRenderNode *node);

Retrieves the color used by the text `node` .

#### Parameters

node | a text GskRenderNode. | [type GskTextNode]

#### Returns

the text color.

[transfer none]

### gsk_text_node_has_color_glyphs ()

    gboolean
    gsk_text_node_has_color_glyphs (GskRenderNode *node);

Checks whether the text `node` has color glyphs.

#### Parameters

node | a text GskRenderNode. | [type GskTextNode]

#### Returns

`TRUE` if the text node has color glyphs

### gsk_text_node_get_num_glyphs ()

    guint
    gsk_text_node_get_num_glyphs (GskRenderNode *node);

Retrieves the number of glyphs in the text node.

#### Parameters

node | a text GskRenderNode. | [type GskTextNode]

#### Returns

the number of glyphs

### gsk_text_node_get_offset ()

    const graphene_point_t *
    gsk_text_node_get_offset (GskRenderNode *node);

Retrieves the offset applied to the text.

#### Parameters

node | a text GskRenderNode. | [type GskTextNode]

#### Returns

a point with the horizontal and vertical offsets.

[transfer none]

### gsk_blur_node_new ()

    GskRenderNode *
    gsk_blur_node_new (GskRenderNode *child,
                       float radius);

Creates a render node that blurs the child.

#### Parameters

child | the child node to blur |
radius | the blur radius |

#### Returns

a new GskRenderNode.

[transfer full][type GskBlurNode]

### gsk_blur_node_get_child ()

    GskRenderNode *
    gsk_blur_node_get_child (GskRenderNode *node);

Retrieves the child GskRenderNode of the blur `node` .

#### Parameters

node | a blur GskRenderNode. | [type GskBlurNode]

#### Returns

the blurred child node.

[transfer none]

### gsk_blur_node_get_radius ()

    float
    gsk_blur_node_get_radius (GskRenderNode *node);

Retrieves the blur radius of the `node` .

#### Parameters

node | a blur GskRenderNode. | [type GskBlurNode]

#### Returns

the blur radius

### gsk_debug_node_new ()

    GskRenderNode *
    gsk_debug_node_new (GskRenderNode *child,
                        char *message);

Creates a GskRenderNode that will add debug information about the given `child` .

Adding this node has no visual effect.

#### Parameters

child | The child to add debug info for |
message | The debug message. | [transfer full]

#### Returns

A new GskRenderNode.

[transfer full][type GskDebugNode]

### gsk_debug_node_get_child ()

    GskRenderNode *
    gsk_debug_node_get_child (GskRenderNode *node);

Gets the child node that is getting drawn by the given `node` .

#### Parameters

node | a debug GskRenderNode. | [type GskDebugNode]

#### Returns

the child GskRenderNode.

[transfer none]

### gsk_debug_node_get_message ()

    const char *
    gsk_debug_node_get_message (GskRenderNode *node);

Gets the debug message that was set on this node

#### Parameters

node | a debug GskRenderNode. | [type GskDebugNode]

#### Returns

The debug message.

[transfer none]

## Types and Values

### GskRenderNode

    typedef struct _GskRenderNode GskRenderNode;

A node in the render tree.

### GskBlendNode

    typedef struct _GskBlendNode GskBlendNode;

### GskBlurNode

    typedef struct _GskBlurNode GskBlurNode;

### GskBorderNode

    typedef struct _GskBorderNode GskBorderNode;

### GskCairoNode

    typedef struct _GskCairoNode GskCairoNode;

### GskClipNode

    typedef struct _GskClipNode GskClipNode;

### GskColorMatrixNode

    typedef struct _GskColorMatrixNode GskColorMatrixNode;

### GskColorNode

    typedef struct _GskColorNode GskColorNode;

### GskContainerNode

    typedef struct _GskContainerNode GskContainerNode;

### GskCrossFadeNode

    typedef struct _GskCrossFadeNode GskCrossFadeNode;

### GskDebugNode

    typedef struct _GskDebugNode GskDebugNode;

### GskInsetShadowNode

    typedef struct _GskInsetShadowNode GskInsetShadowNode;

### GskLinearGradientNode

    typedef struct _GskLinearGradientNode GskLinearGradientNode;

### GskOpacityNode

    typedef struct _GskOpacityNode GskOpacityNode;

### GskOutsetShadowNode

    typedef struct _GskOutsetShadowNode GskOutsetShadowNode;

### GskRepeatingLinearGradientNode

    typedef struct _GskRepeatingLinearGradientNode GskRepeatingLinearGradientNode;

### GskRepeatNode

    typedef struct _GskRepeatNode GskRepeatNode;

### GskRoundedClipNode

    typedef struct _GskRoundedClipNode GskRoundedClipNode;

### GskShadowNode

    typedef struct _GskShadowNode GskShadowNode;

### GskTextNode

    typedef struct _GskTextNode GskTextNode;

### GskTextureNode

    typedef struct _GskTextureNode GskTextureNode;

### GskTransformNode

    typedef struct _GskTransformNode GskTransformNode;

### enum GskRenderNodeType

The type of a node determines what the node is rendering.

#### Members

GSK_NOT_A_RENDER_NODE | Error type. No node will ever have this type. |
GSK_CONTAINER_NODE | A node containing a stack of children |
GSK_CAIRO_NODE | A node drawing a cairo_surface_t |
GSK_COLOR_NODE | A node drawing a single color rectangle |
GSK_LINEAR_GRADIENT_NODE | A node drawing a linear gradient |
GSK_REPEATING_LINEAR_GRADIENT_NODE | A node drawing a repeating linear gradient |
GSK_BORDER_NODE | A node stroking a border around an area |
GSK_TEXTURE_NODE | A node drawing a GdkTexture |
GSK_INSET_SHADOW_NODE | A node drawing an inset shadow |
GSK_OUTSET_SHADOW_NODE | A node drawing an outset shadow |
GSK_TRANSFORM_NODE | A node that renders its child after applying a matrix transform |
GSK_OPACITY_NODE | A node that changes the opacity of its child |
GSK_COLOR_MATRIX_NODE | A node that applies a color matrix to every pixel |
GSK_REPEAT_NODE | A node that repeats the child's contents |
GSK_CLIP_NODE | A node that clips its child to a rectangular area |
GSK_ROUNDED_CLIP_NODE | A node that clips its child to a rounded rectangle |
GSK_SHADOW_NODE | A node that draws a shadow below its child |
GSK_BLEND_NODE | A node that blends two children together |
GSK_CROSS_FADE_NODE | A node that cross-fades between two children |
GSK_TEXT_NODE | A node containing a glyph string |
GSK_BLUR_NODE | A node that applies a blur |
GSK_DEBUG_NODE | Debug information that does not affect the rendering |

### enum GskSerializationError

Errors that can happen during (de)serialization.

#### Members

GSK_SERIALIZATION_UNSUPPORTED_FORMAT | The format can not be identified |
GSK_SERIALIZATION_UNSUPPORTED_VERSION | The version of the data is not understood |
GSK_SERIALIZATION_INVALID_DATA | The given data may not exist in a proper serialization |

### enum GskScalingFilter

The filters used when scaling texture data.

The actual implementation of each filter is deferred to the rendering pipeline.

#### Members

GSK_SCALING_FILTER_LINEAR | linear interpolation filter |
GSK_SCALING_FILTER_NEAREST | nearest neighbor interpolation filter |
GSK_SCALING_FILTER_TRILINEAR | linear interpolation along each axis, plus mipmap generation, with linear interpolation along the mipmap levels |

### struct GskColorStop

    struct GskColorStop {
      float offset;
      GdkRGBA color;
    };

### struct GskShadow

    struct GskShadow {
      GdkRGBA color;
      float dx;
      float dy;
      float radius;
    };

### enum GskBlendMode

The blend modes available for render nodes.

The implementation of each blend mode is deferred to the rendering pipeline.

See https://www.w3.org/TR/compositing-1/blending for more information on blending and blend modes.

#### Members

GSK_BLEND_MODE_DEFAULT | The default blend mode, which specifies no blending |
GSK_BLEND_MODE_MULTIPLY | The source color is multiplied by the destination and replaces the destination |
GSK_BLEND_MODE_SCREEN | Multiplies the complements of the destination and source color values, then complements the result. |
GSK_BLEND_MODE_OVERLAY | Multiplies or screens the colors, depending on the destination color value. This is the inverse of hard-list |
GSK_BLEND_MODE_DARKEN | Selects the darker of the destination and source colors |
GSK_BLEND_MODE_LIGHTEN | Selects the lighter of the destination and source colors |
GSK_BLEND_MODE_COLOR_DODGE | Brightens the destination color to reflect the source color |
GSK_BLEND_MODE_COLOR_BURN | Darkens the destination color to reflect the source color |
GSK_BLEND_MODE_HARD_LIGHT | Multiplies or screens the colors, depending on the source color value |
GSK_BLEND_MODE_SOFT_LIGHT | Darkens or lightens the colors, depending on the source color value |
GSK_BLEND_MODE_DIFFERENCE | Subtracts the darker of the two constituent colors from the lighter color |
GSK_BLEND_MODE_EXCLUSION | Produces an effect similar to that of the difference mode but lower in contrast |
GSK_BLEND_MODE_COLOR | Creates a color with the hue and saturation of the source color and the luminosity of the destination color |
GSK_BLEND_MODE_HUE | Creates a color with the hue of the source color and the saturation and luminosity of the destination color |
GSK_BLEND_MODE_SATURATION | Creates a color with the saturation of the source color and the hue and luminosity of the destination color |
GSK_BLEND_MODE_LUMINOSITY | Creates a color with the luminosity of the source color and the hue and saturation of the destination color |