| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
| 10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
| 11 #include "SkFlattenableBuffers.h" | 11 #include "SkFlattenableBuffers.h" |
| 12 #include "SkMaskFilter.h" | 12 #include "SkMaskFilter.h" |
| 13 #include "SkBounder.h" | 13 #include "SkBounder.h" |
| 14 #include "SkRasterClip.h" | 14 #include "SkRasterClip.h" |
| 15 #include "SkRTConf.h" | 15 #include "SkRTConf.h" |
| 16 #include "SkStringUtils.h" | 16 #include "SkStringUtils.h" |
| 17 | 17 |
| 18 const SkScalar SkBlurMaskFilter::kBLUR_SIGMA_SCALE = SkFloatToScalar(0.6f); |
| 19 const SkScalar SkBlurMaskFilter::kBlurRadiusFudgeFactor = SkFloatToScalar(.57735
f); |
| 20 |
| 18 class SkBlurMaskFilterImpl : public SkMaskFilter { | 21 class SkBlurMaskFilterImpl : public SkMaskFilter { |
| 19 public: | 22 public: |
| 20 SkBlurMaskFilterImpl(SkScalar radius, SkBlurMaskFilter::BlurStyle, | 23 SkBlurMaskFilterImpl(SkScalar radius, SkBlurMaskFilter::BlurStyle, |
| 21 uint32_t flags); | 24 uint32_t flags); |
| 22 | 25 |
| 23 // overrides from SkMaskFilter | 26 // overrides from SkMaskFilter |
| 24 virtual SkMask::Format getFormat() const SK_OVERRIDE; | 27 virtual SkMask::Format getFormat() const SK_OVERRIDE; |
| 25 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, | 28 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, |
| 26 SkIPoint* margin) const SK_OVERRIDE; | 29 SkIPoint* margin) const SK_OVERRIDE; |
| 27 | 30 |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 } | 296 } |
| 294 } | 297 } |
| 295 patch->fMask.fBounds.offsetTo(0, 0); | 298 patch->fMask.fBounds.offsetTo(0, 0); |
| 296 patch->fOuterRect = dstM.fBounds; | 299 patch->fOuterRect = dstM.fBounds; |
| 297 patch->fCenter = center; | 300 patch->fCenter = center; |
| 298 return kTrue_FilterReturn; | 301 return kTrue_FilterReturn; |
| 299 } | 302 } |
| 300 | 303 |
| 301 void SkBlurMaskFilterImpl::computeFastBounds(const SkRect& src, | 304 void SkBlurMaskFilterImpl::computeFastBounds(const SkRect& src, |
| 302 SkRect* dst) const { | 305 SkRect* dst) const { |
| 303 dst->set(src.fLeft - fRadius, src.fTop - fRadius, | 306 SkScalar gpuPad, rasterPad; |
| 304 src.fRight + fRadius, src.fBottom + fRadius); | 307 |
| 308 { |
| 309 // GPU path |
| 310 SkScalar sigma = SkScalarMul(fRadius, SkBlurMaskFilter::kBLUR_SIGMA_SCAL
E); |
| 311 gpuPad = sigma * 3.0f; |
| 312 } |
| 313 |
| 314 { |
| 315 // raster path |
| 316 SkScalar radius = SkScalarMul(fRadius, SkBlurMaskFilter::kBlurRadiusFudg
eFactor); |
| 317 |
| 318 radius = (radius + .5f) * 2.f; |
| 319 |
| 320 rasterPad = SkIntToScalar(SkScalarRoundToInt(radius * 3)/2); |
| 321 } |
| 322 |
| 323 SkScalar pad = SkMaxScalar(gpuPad, rasterPad); |
| 324 |
| 325 dst->set(src.fLeft - pad, src.fTop - pad, |
| 326 src.fRight + pad, src.fBottom + pad); |
| 305 } | 327 } |
| 306 | 328 |
| 307 SkBlurMaskFilterImpl::SkBlurMaskFilterImpl(SkFlattenableReadBuffer& buffer) | 329 SkBlurMaskFilterImpl::SkBlurMaskFilterImpl(SkFlattenableReadBuffer& buffer) |
| 308 : SkMaskFilter(buffer) { | 330 : SkMaskFilter(buffer) { |
| 309 fRadius = buffer.readScalar(); | 331 fRadius = buffer.readScalar(); |
| 310 fBlurStyle = (SkBlurMaskFilter::BlurStyle)buffer.readInt(); | 332 fBlurStyle = (SkBlurMaskFilter::BlurStyle)buffer.readInt(); |
| 311 fBlurFlags = buffer.readUInt() & SkBlurMaskFilter::kAll_BlurFlag; | 333 fBlurFlags = buffer.readUInt() & SkBlurMaskFilter::kAll_BlurFlag; |
| 312 SkASSERT(fRadius >= 0); | 334 SkASSERT(fRadius >= 0); |
| 313 SkASSERT((unsigned)fBlurStyle < SkBlurMaskFilter::kBlurStyleCount); | 335 SkASSERT((unsigned)fBlurStyle < SkBlurMaskFilter::kBlurStyleCount); |
| 314 } | 336 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 } else { | 383 } else { |
| 362 str->append("None"); | 384 str->append("None"); |
| 363 } | 385 } |
| 364 str->append("))"); | 386 str->append("))"); |
| 365 } | 387 } |
| 366 #endif | 388 #endif |
| 367 | 389 |
| 368 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 390 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 369 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 391 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 370 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 392 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |