rendernode: clip when drawing shadows
authorBenjamin Otte <otte@redhat.com>
Fri, 5 May 2023 02:53:08 +0000 (04:53 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 16 May 2023 16:53:27 +0000 (18:53 +0200)
Ensures the shadow stays small.

gsk/gskrendernodeimpl.c

index 90ef6fd13f78bc2827ecb5b451af012093d7d269..c60bd5b00f36ecda78609e4b45a186197967e6eb 100644 (file)
@@ -4413,6 +4413,11 @@ gsk_shadow_node_draw (GskRenderNode *node,
   pattern = cairo_pop_group (cr);
   cairo_restore (cr);
 
+  cairo_save (cr);
+  /* clip so the blur area stays small */
+  gsk_cairo_rectangle (cr, &node->bounds);
+  cairo_clip (cr);
+
   for (i = 0; i < self->n_shadows; i++)
     {
       GskShadow *shadow = &self->shadows[i];
@@ -4434,6 +4439,7 @@ gsk_shadow_node_draw (GskRenderNode *node,
 
   cairo_set_source (cr, pattern);
   cairo_paint (cr);
+  cairo_restore (cr);
 
   cairo_pattern_destroy (pattern);
 }