snapshot: Directly clip color nodes

Clipping a color node is trivial so we do it here directly since that
might later save the entire clip node as well as freeing the fragment
shaders from coloring lots of pixels that will be clipped away.
This commit is contained in:
Timm Bäder 2017-12-12 20:33:53 +01:00
parent 8107b1a2dd
commit d9f1620b2f

View File

@ -1345,7 +1345,23 @@ gtk_snapshot_append_color (GtkSnapshot *snapshot,
g_return_if_fail (color != NULL);
g_return_if_fail (bounds != NULL);
graphene_rect_offset_r (bounds, current_state->translate_x, current_state->translate_y, &real_bounds);
/* Color nodes are trivially "clippable" so we do it now */
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_color_node_new (color, &real_bounds);
if (name && snapshot->record_names)