snapshot: Limit cairo nodes to clip region

In certain cases, we might create large cairo nodes, resulting in
surfaces so large, cairo can't handle them. Fix this by limiting the
cairo node to the current clip region.
This commit is contained in:
Timm Bäder 2018-03-19 18:52:12 +01:00
parent 4240119d64
commit 3f367277fe

View File

@ -1339,6 +1339,20 @@ gtk_snapshot_append_cairo (GtkSnapshot *snapshot,
g_return_val_if_fail (bounds != NULL, NULL);
graphene_rect_offset_r (bounds, current_state->translate_x, current_state->translate_y, &real_bounds);
if (current_state->clip_region)
{
cairo_rectangle_int_t clip_extents;
cairo_region_get_extents (current_state->clip_region, &clip_extents);
graphene_rect_intersection (&GRAPHENE_RECT_INIT (
clip_extents.x,
clip_extents.y,
clip_extents.width,
clip_extents.height
),
&real_bounds, &real_bounds);
}
node = gsk_cairo_node_new (&real_bounds);
if (name && snapshot->record_names)