| Index: src/effects/SkBlurMaskFilter.cpp
|
| ===================================================================
|
| --- src/effects/SkBlurMaskFilter.cpp (revision 9604)
|
| +++ src/effects/SkBlurMaskFilter.cpp (working copy)
|
| @@ -15,6 +15,9 @@
|
| #include "SkRTConf.h"
|
| #include "SkStringUtils.h"
|
|
|
| +const SkScalar SkBlurMaskFilter::kBLUR_SIGMA_SCALE = SkFloatToScalar(0.6f);
|
| +const SkScalar SkBlurMaskFilter::kBlurRadiusFudgeFactor = SkFloatToScalar(.57735f);
|
| +
|
| class SkBlurMaskFilterImpl : public SkMaskFilter {
|
| public:
|
| SkBlurMaskFilterImpl(SkScalar radius, SkBlurMaskFilter::BlurStyle,
|
| @@ -300,8 +303,27 @@
|
|
|
| void SkBlurMaskFilterImpl::computeFastBounds(const SkRect& src,
|
| SkRect* dst) const {
|
| - dst->set(src.fLeft - fRadius, src.fTop - fRadius,
|
| - src.fRight + fRadius, src.fBottom + fRadius);
|
| + SkScalar gpuPad, rasterPad;
|
| +
|
| + {
|
| + // GPU path
|
| + SkScalar sigma = SkScalarMul(fRadius, SkBlurMaskFilter::kBLUR_SIGMA_SCALE);
|
| + gpuPad = sigma * 3.0f;
|
| + }
|
| +
|
| + {
|
| + // raster path
|
| + SkScalar radius = SkScalarMul(fRadius, SkBlurMaskFilter::kBlurRadiusFudgeFactor);
|
| +
|
| + radius = (radius + .5f) * 2.f;
|
| +
|
| + rasterPad = SkIntToScalar(SkScalarRoundToInt(radius * 3)/2);
|
| + }
|
| +
|
| + SkScalar pad = SkMaxScalar(gpuPad, rasterPad);
|
| +
|
| + dst->set(src.fLeft - pad, src.fTop - pad,
|
| + src.fRight + pad, src.fBottom + pad);
|
| }
|
|
|
| SkBlurMaskFilterImpl::SkBlurMaskFilterImpl(SkFlattenableReadBuffer& buffer)
|
|
|