diff --git a/gtk/gtkcairoblur.c b/gtk/gtkcairoblur.c index b3f14db5b2..1d2cb9f26d 100644 --- a/gtk/gtkcairoblur.c +++ b/gtk/gtkcairoblur.c @@ -25,6 +25,19 @@ #include #include +/* + * Gets the size for a single box blur. + * + * Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for + * approximating a Gaussian using box blurs. This yields quite a good + * approximation for a Gaussian. For more details, see: + * http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement + * https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19 + */ +#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4)) + +#define get_box_filter_size(radius) ((int)(GAUSSIAN_SCALE_FACTOR * radius)) + /* This applies a single box blur pass to a horizontal range of pixels; * since the box blur has the same weight for all pixels, we can * implement an efficient sliding window algorithm where we add @@ -218,8 +231,6 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface, * http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement * https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19 */ -#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4) * 1.5) - int _gtk_cairo_blur_compute_pixels (double radius) {