summaryrefslogtreecommitdiff
path: root/gtk/gtkcssshadowvalue.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2013-05-06 12:34:09 +0200
committerAlexander Larsson <alexl@redhat.com>2013-05-06 16:20:03 +0200
commit5ba5306dc9f936d0869b45f27acf1b042c35c23e (patch)
tree2469c5ecdafd6c0dd4ed3684bed46d1ab9df8c27 /gtk/gtkcssshadowvalue.c
parent70774bf9789df10ec298e4b5b44b98a2c83c9037 (diff)
downloadgtk+-5ba5306dc9f936d0869b45f27acf1b042c35c23e.tar.gz
css shadows: Exit early if clip is empty
Diffstat (limited to 'gtk/gtkcssshadowvalue.c')
-rw-r--r--gtk/gtkcssshadowvalue.c18
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);