rendernode: clip when drawing shadows
authorBenjamin Otte <otte@redhat.com>
Fri, 5 May 2023 02:53:08 +0000 (04:53 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 5 Jun 2023 11:52:27 +0000 (07:52 -0400)
Ensures the shadow stays small.

gsk/gskrendernodeimpl.c

index 6dcad3002f4938a2fc72b9a5ff2367e909ecbde7..9a08c2b134a61b5979ee015a7f495f96797ce971 100644 (file)
@@ -4108,6 +4108,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];
@@ -4129,6 +4134,7 @@ gsk_shadow_node_draw (GskRenderNode *node,
 
   cairo_set_source (cr, pattern);
   cairo_paint (cr);
+  cairo_restore (cr);
 
   cairo_pattern_destroy (pattern);
 }