From: Matthias Clasen Date: Sat, 24 Jul 2021 13:49:09 +0000 (-0400) Subject: gsk: Add a private getter for container children X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~3^2~1^2~8 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7fb13896485ccea9520cd2948c2caacbe5ba426b;p=gtk4.git gsk: Add a private getter for container children No need to get them one-by-one, in our inner loop. --- diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index c7751b8e3a..ef008f8294 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 ***/ /** diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h index 8fef8e7aa4..b9e719cdfb 100644 --- a/gsk/gskrendernodeprivate.h +++ b/gsk/gskrendernodeprivate.h @@ -103,6 +103,10 @@ bool gsk_border_node_get_uniform_color (const GskRenderNode void gsk_text_node_serialize_glyphs (GskRenderNode *self, GString *str); +GskRenderNode ** gsk_container_node_get_children (const GskRenderNode *node, + guint *n_children); + + G_END_DECLS #endif /* __GSK_RENDER_NODE_PRIVATE_H__ */ diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c index 40e730557f..6f87340624 100644 --- a/gsk/ngl/gsknglrenderjob.c +++ b/gsk/ngl/gsknglrenderjob.c @@ -3536,18 +3536,21 @@ gsk_ngl_render_job_visit_node (GskNglRenderJob *job, case GSK_CONTAINER_NODE: { - guint n_children = gsk_container_node_get_n_children (node); + GskRenderNode **children; + guint n_children; + + children = gsk_container_node_get_children (node, &n_children); for (guint i = 0; i < n_children; i++) { - const GskRenderNode *child = gsk_container_node_get_child (node, i); + const GskRenderNode *child = children[i]; if (i + 1 < n_children && job->current_clip->is_fully_contained && gsk_render_node_get_node_type (child) == GSK_ROUNDED_CLIP_NODE) { const GskRenderNode *grandchild = gsk_rounded_clip_node_get_child (child); - const GskRenderNode *child2 = gsk_container_node_get_child (node, i + 1); + const GskRenderNode *child2 = children[i + 1]; if (gsk_render_node_get_node_type (grandchild) == GSK_COLOR_NODE && gsk_render_node_get_node_type (child2) == GSK_BORDER_NODE && gsk_border_node_get_uniform_color (child2) &&