diff options
author | Benjamin Otte <otte@redhat.com> | 2014-02-03 15:56:59 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2014-02-03 21:38:16 +0100 |
commit | e9fb8ad1f7606deb4ae35773351e67281d56aa9f (patch) | |
tree | 5d86ac77d3a641058860b015365b0962fda9306b /gtk/gtkcssshadowsvalue.c | |
parent | 43baa213b254a9457eca0ff6aec46b8678fab2ea (diff) | |
download | gtk+-e9fb8ad1f7606deb4ae35773351e67281d56aa9f.tar.gz |
css: Fix computation of pixels occupied by blur radius
These computations were done randomly in lots of places and more often
than not, they were also wrong.
This function was copied (with docs) from Firefox:
http://lxr.mozilla.org/mozilla-central/source/gfx/2d/Blur.cpp
https://bugzilla.gnome.org/show_bug.cgi?id=723159
Diffstat (limited to 'gtk/gtkcssshadowsvalue.c')
-rw-r--r-- | gtk/gtkcssshadowsvalue.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c index b688594cc1..eb32471cec 100644 --- a/gtk/gtkcssshadowsvalue.c +++ b/gtk/gtkcssshadowsvalue.c @@ -21,6 +21,7 @@ #include "gtkcssshadowsvalueprivate.h" +#include "gtkcairoblurprivate.h" #include "gtkcssshadowvalueprivate.h" #include <string.h> @@ -309,7 +310,7 @@ _gtk_css_shadows_value_get_extents (const GtkCssValue *shadows, guint i; GtkBorder b = { 0 }; const GtkCssValue *shadow; - gdouble hoffset, voffset, spread, radius; + gdouble hoffset, voffset, spread, radius, clip_radius; g_return_if_fail (shadows->class == >K_CSS_VALUE_SHADOWS); @@ -323,11 +324,12 @@ _gtk_css_shadows_value_get_extents (const GtkCssValue *shadows, _gtk_css_shadow_value_get_geometry (shadow, &hoffset, &voffset, &radius, &spread); + clip_radius = _gtk_cairo_blur_compute_pixels (radius); - b.top = MAX (0, radius + spread - voffset); - b.right = MAX (0, radius + spread + hoffset); - b.bottom = MAX (0, radius + spread + voffset); - b.left = MAX (0, radius + spread - hoffset); + b.top = MAX (0, clip_radius + spread - voffset); + b.right = MAX (0, clip_radius + spread + hoffset); + b.bottom = MAX (0, clip_radius + spread + voffset); + b.left = MAX (0, clip_radius + spread - hoffset); border->top = MAX (border->top, b.top); border->right = MAX (border->right, b.right); |