From 3f367277fef5d6cdf921428279ba54904b8c9201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Mon, 19 Mar 2018 18:52:12 +0100 Subject: 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. --- gtk/gtksnapshot.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gtk') diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index c9ebf0b5a0..420f7b6c87 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -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) -- cgit v1.2.1