gtksnapshot: Merge trivial clip duplicates

I got a lot of "clip in clip" cases, for example a CellClip with a
CellTextClip inside. It is really trivial to merge these when we
pop and makes it easier for all backends, so lets do that.
This commit is contained in:
Alexander Larsson 2017-11-30 15:31:46 +01:00
parent f5e0986230
commit d95cbb2757

View File

@ -548,7 +548,21 @@ gtk_snapshot_collect_clip (GtkSnapshot *snapshot,
if (node == NULL)
return NULL;
clip_node = gsk_clip_node_new (node, &state->data.clip.bounds);
/* Its not uncommon to produce stacked clip nodes, which are trivial
to merge, so do that here */
if (gsk_render_node_get_node_type (node) == GSK_CLIP_NODE)
{
GskRenderNode *child = gsk_clip_node_get_child (node);
const graphene_rect_t *node_clip = gsk_clip_node_peek_clip (node);
graphene_rect_t merged_clip;
graphene_rect_intersection (&state->data.clip.bounds, node_clip, &merged_clip);
clip_node = gsk_clip_node_new (child, &state->data.clip.bounds);
gsk_render_node_unref (node);
}
else
clip_node = gsk_clip_node_new (node, &state->data.clip.bounds);
if (name)
gsk_render_node_set_name (clip_node, name);