diff options
author | Alexander Larsson <alexl@redhat.com> | 2013-05-06 12:34:09 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2013-05-06 16:20:03 +0200 |
commit | 5ba5306dc9f936d0869b45f27acf1b042c35c23e (patch) | |
tree | 2469c5ecdafd6c0dd4ed3684bed46d1ab9df8c27 /gtk/gtkcssshadowvalue.c | |
parent | 70774bf9789df10ec298e4b5b44b98a2c83c9037 (diff) | |
download | gtk+-5ba5306dc9f936d0869b45f27acf1b042c35c23e.tar.gz |
css shadows: Exit early if clip is empty
Diffstat (limited to 'gtk/gtkcssshadowvalue.c')
-rw-r--r-- | gtk/gtkcssshadowvalue.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index cf533a1ce6..7b6efdc8ad 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -475,6 +475,15 @@ _gtk_css_shadow_value_get_geometry (const GtkCssValue *shadow, *spread = _gtk_css_number_value_get (shadow->spread, 0); } +static gboolean +has_empty_clip (cairo_t *cr) +{ + double x1, y1, x2, y2; + + cairo_clip_extents (cr, &x1, &y1, &x2, &y2); + return x1 == x2 && y1 == y2; +} + static void draw_shadow (const GtkCssValue *shadow, cairo_t *cr, @@ -483,6 +492,9 @@ draw_shadow (const GtkCssValue *shadow, { cairo_t *shadow_cr; + if (has_empty_clip (cr)) + return; + shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr); cairo_set_fill_rule (shadow_cr, CAIRO_FILL_RULE_EVEN_ODD); @@ -530,6 +542,12 @@ _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); |