diff options
-rw-r--r-- | gtk/gtkcssshadowvalue.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index d3847ba627..4ea2f76114 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -638,9 +638,15 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow, { GtkRoundedBox box, clip_box; double spread, radius, clip_radius, x, y, outside; + double x1, y1, x2, y2; g_return_if_fail (shadow->class == >K_CSS_VALUE_SHADOW); + cairo_clip_extents (cr, &x1, &y1, &x2, &y2); + if ((shadow->inset && !_gtk_rounded_box_intersects_rectangle (padding_box, x1, y1, x2, y2)) || + (!shadow->inset && _gtk_rounded_box_contains_rectangle (padding_box, x1, y1, x2, y2))) + return; + cairo_save (cr); spread = _gtk_css_number_value_get (shadow->spread, 0); @@ -658,7 +664,6 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow, { cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); _gtk_rounded_box_path (padding_box, cr); - outside = spread + clip_radius + MAX (fabs (x), fabs (y)); clip_box = *padding_box; _gtk_rounded_box_grow (&clip_box, outside, outside, outside, outside); @@ -667,12 +672,6 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow, cairo_clip (cr); } - if (has_empty_clip (cr)) - { - cairo_restore (cr); - return; - } - box = *padding_box; _gtk_rounded_box_move (&box, x, y); |