snapshot: Repeat color nodes by creating a larger color node

This commit is contained in:
Timm Bäder 2019-12-19 09:15:13 +01:00
parent 587bc82c37
commit 4788f88840

View File

@ -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);