mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 22:41:43 +00:00
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:
parent
f5e0986230
commit
d95cbb2757
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user