From: Timm Bäder Date: Thu, 19 Dec 2019 08:15:13 +0000 (+0100) Subject: snapshot: Repeat color nodes by creating a larger color node X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~406 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=4788f8884005158e8c1328d7eced1b61ba0302e3;p=gtk4.git snapshot: Repeat color nodes by creating a larger color node --- diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index a7f55e6bbb..c87ba493f9 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -547,13 +547,25 @@ gtk_snapshot_collect_repeat (GtkSnapshot *snapshot, guint n_nodes) { GskRenderNode *node, *repeat_node; - graphene_rect_t *bounds = &state->data.repeat.bounds; - graphene_rect_t *child_bounds = &state->data.repeat.child_bounds; + const graphene_rect_t *bounds = &state->data.repeat.bounds; + const graphene_rect_t *child_bounds = &state->data.repeat.child_bounds; node = gtk_snapshot_collect_default (snapshot, state, nodes, n_nodes); if (node == NULL) return NULL; + if (gsk_render_node_get_node_type (node) == GSK_COLOR_NODE && + graphene_rect_equal (child_bounds, &node->bounds)) + { + /* Repeating a color node entirely is pretty easy by just increasing + * the size of the color node. */ + GskRenderNode *color_node = gsk_color_node_new (gsk_color_node_peek_color (node), bounds); + + gsk_render_node_unref (node); + + return color_node; + } + repeat_node = gsk_repeat_node_new (bounds, node, child_bounds->size.width > 0 ? child_bounds : NULL);