diff options
Diffstat (limited to 'gsk/gskrendernodeimpl.c')
-rw-r--r-- | gsk/gskrendernodeimpl.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index c7751b8e3a..9a9705d0fd 100644 --- a/gsk/gskrendernodeimpl.c +++ b/gsk/gskrendernodeimpl.c @@ -2780,6 +2780,17 @@ gsk_container_node_get_child (const GskRenderNode *node, return self->children[idx]; } +GskRenderNode ** +gsk_container_node_get_children (const GskRenderNode *node, + guint *n_children) +{ + const GskContainerNode *self = (const GskContainerNode *) node; + + *n_children = self->n_children; + + return self->children; +} + /*** GSK_TRANSFORM_NODE ***/ /** @@ -2793,6 +2804,7 @@ struct _GskTransformNode GskRenderNode *child; GskTransform *transform; + float dx, dy; }; static void @@ -2944,6 +2956,11 @@ gsk_transform_node_new (GskRenderNode *child, self->child = gsk_render_node_ref (child); self->transform = gsk_transform_ref (transform); + if (gsk_transform_get_category (transform) >= GSK_TRANSFORM_CATEGORY_2D_TRANSLATE) + gsk_transform_to_translate (transform, &self->dx, &self->dy); + else + self->dx = self->dy = 0; + gsk_transform_transform_bounds (self->transform, &child->bounds, &node->bounds); @@ -2983,6 +3000,17 @@ gsk_transform_node_get_transform (const GskRenderNode *node) return self->transform; } +void +gsk_transform_node_get_translate (const GskRenderNode *node, + float *dx, + float *dy) +{ + const GskTransformNode *self = (const GskTransformNode *) node; + + *dx = self->dx; + *dy = self->dy; +} + /*** GSK_OPACITY_NODE ***/ /** |