summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2020-02-13 00:14:29 +0100
committerBenjamin Otte <otte@redhat.com>2020-02-13 07:36:38 +0100
commit67610b124277d8f9775b4c6f78a40a5dd61d89e2 (patch)
tree5cd35028f065d2ea750de3439b47c3f41cf6a450
parentf0993fc881ed4fcd159504510af5fda53a156386 (diff)
downloadgtk+-67610b124277d8f9775b4c6f78a40a5dd61d89e2.tar.gz
cairoblur: Move the check for early exit
That means we only have one place where we check all kinds of early exits.
-rw-r--r--gsk/gskcairoblur.c11
-rw-r--r--gsk/gskrendernodeimpl.c10
2 files changed, 10 insertions, 11 deletions
diff --git a/gsk/gskcairoblur.c b/gsk/gskcairoblur.c
index 6b5a3d56df..fd83470f6a 100644
--- a/gsk/gskcairoblur.c
+++ b/gsk/gskcairoblur.c
@@ -281,8 +281,13 @@ gsk_cairo_blur_compute_pixels (double radius)
}
static gboolean
-needs_blur (float radius)
+needs_blur (float radius,
+ GskBlurFlags blur_flags)
{
+ /* Neither blurring horizontal nor vertical means no blurring at all. */
+ if ((blur_flags & (GSK_BLUR_X | GSK_BLUR_Y)) == 0)
+ return FALSE;
+
/* The code doesn't actually do any blurring for radius 1, as it
* ends up with box filter size 1 */
if (radius <= 1.0)
@@ -306,7 +311,7 @@ gsk_cairo_blur_start_drawing (cairo_t *cr,
gboolean blur_x = (blur_flags & GSK_BLUR_X) != 0;
gboolean blur_y = (blur_flags & GSK_BLUR_Y) != 0;
- if (!needs_blur (radius))
+ if (!needs_blur (radius, blur_flags))
return cr;
gdk_cairo_get_clip_rectangle (cr, &clip_rect);
@@ -372,7 +377,7 @@ gsk_cairo_blur_finish_drawing (cairo_t *cr,
cairo_surface_t *surface;
gdouble x_scale;
- if (!needs_blur (radius))
+ if (!needs_blur (radius, blur_flags))
return cr;
original_cr = cairo_get_user_data (cr, &original_cr_key);
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c
index 43844cd1e2..e35fd1b44a 100644
--- a/gsk/gskrendernodeimpl.c
+++ b/gsk/gskrendernodeimpl.c
@@ -770,17 +770,12 @@ draw_shadow (cairo_t *cr,
GskBlurFlags blur_flags)
{
cairo_t *shadow_cr;
- gboolean do_blur;
if (has_empty_clip (cr))
return;
gdk_cairo_set_source_rgba (cr, color);
- do_blur = (blur_flags & (GSK_BLUR_X | GSK_BLUR_Y)) != 0;
- if (do_blur)
- shadow_cr = gsk_cairo_blur_start_drawing (cr, radius, blur_flags);
- else
- shadow_cr = cr;
+ shadow_cr = gsk_cairo_blur_start_drawing (cr, radius, blur_flags);
cairo_set_fill_rule (shadow_cr, CAIRO_FILL_RULE_EVEN_ODD);
gsk_rounded_rect_path (box, shadow_cr);
@@ -791,8 +786,7 @@ draw_shadow (cairo_t *cr,
cairo_fill (shadow_cr);
- if (do_blur)
- gsk_cairo_blur_finish_drawing (shadow_cr, radius, color, blur_flags);
+ gsk_cairo_blur_finish_drawing (shadow_cr, radius, color, blur_flags);
}
typedef struct {