summaryrefslogtreecommitdiff
path: root/gtk/gtkcssshadowsvalue.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2014-02-03 15:56:59 +0100
committerBenjamin Otte <otte@redhat.com>2014-02-03 21:38:16 +0100
commite9fb8ad1f7606deb4ae35773351e67281d56aa9f (patch)
tree5d86ac77d3a641058860b015365b0962fda9306b /gtk/gtkcssshadowsvalue.c
parent43baa213b254a9457eca0ff6aec46b8678fab2ea (diff)
downloadgtk+-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.c12
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 == &GTK_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);