| 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" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 const SkRRect& rrect) const SK_OVERRID
E; | 52 const SkRRect& rrect) const SK_OVERRID
E; |
| 53 | 53 |
| 54 virtual bool filterMaskGPU(GrTexture* src, | 54 virtual bool filterMaskGPU(GrTexture* src, |
| 55 const SkMatrix& ctm, | 55 const SkMatrix& ctm, |
| 56 const SkRect& maskRect, | 56 const SkRect& maskRect, |
| 57 GrTexture** result, | 57 GrTexture** result, |
| 58 bool canOverwriteSrc) const SK_OVERRIDE; | 58 bool canOverwriteSrc) const SK_OVERRIDE; |
| 59 #endif | 59 #endif |
| 60 | 60 |
| 61 virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE; | 61 virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE; |
| 62 virtual bool asABlur(BlurRec*) const SK_OVERRIDE; |
| 62 | 63 |
| 63 SK_TO_STRING_OVERRIDE() | 64 SK_TO_STRING_OVERRIDE() |
| 64 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurMaskFilterImpl) | 65 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurMaskFilterImpl) |
| 65 | 66 |
| 66 protected: | 67 protected: |
| 67 virtual FilterReturn filterRectsToNine(const SkRect[], int count, const SkMa
trix&, | 68 virtual FilterReturn filterRectsToNine(const SkRect[], int count, const SkMa
trix&, |
| 68 const SkIRect& clipBounds, | 69 const SkIRect& clipBounds, |
| 69 NinePatch*) const SK_OVERRIDE; | 70 NinePatch*) const SK_OVERRIDE; |
| 70 | 71 |
| 71 virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, | 72 virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, |
| 72 const SkIRect& clipBounds, | 73 const SkIRect& clipBounds, |
| 73 NinePatch*) const SK_OVERRIDE; | 74 NinePatch*) const SK_OVERRIDE; |
| 74 | 75 |
| 75 bool filterRectMask(SkMask* dstM, const SkRect& r, const SkMatrix& matrix, | 76 bool filterRectMask(SkMask* dstM, const SkRect& r, const SkMatrix& matrix, |
| 76 SkIPoint* margin, SkMask::CreateMode createMode) const; | 77 SkIPoint* margin, SkMask::CreateMode createMode) const; |
| 77 bool filterRRectMask(SkMask* dstM, const SkRRect& r, const SkMatrix& matrix, | 78 bool filterRRectMask(SkMask* dstM, const SkRRect& r, const SkMatrix& matrix, |
| 78 SkIPoint* margin, SkMask::CreateMode createMode) const; | 79 SkIPoint* margin, SkMask::CreateMode createMode) const; |
| 79 | 80 |
| 80 private: | 81 private: |
| 81 // To avoid unseemly allocation requests (esp. for finite platforms like | 82 // To avoid unseemly allocation requests (esp. for finite platforms like |
| 82 // handset) we limit the radius so something manageable. (as opposed to | 83 // handset) we limit the radius so something manageable. (as opposed to |
| 83 // a request like 10,000) | 84 // a request like 10,000) |
| 84 static const SkScalar kMAX_BLUR_SIGMA; | 85 static const SkScalar kMAX_BLUR_SIGMA; |
| 85 | 86 |
| 86 SkScalar fSigma; | 87 SkScalar fSigma; |
| 87 SkBlurStyle fBlurStyle; | 88 SkBlurStyle fBlurStyle; |
| 88 uint32_t fBlurFlags; | 89 uint32_t fBlurFlags; |
| 89 | 90 |
| 91 SkBlurQuality getQuality() const { |
| 92 return (fBlurFlags & SkBlurMaskFilter::kHighQuality_BlurFlag) ? |
| 93 kHigh_SkBlurQuality : kLow_SkBlurQuality; |
| 94 } |
| 95 |
| 90 SkBlurMaskFilterImpl(SkReadBuffer&); | 96 SkBlurMaskFilterImpl(SkReadBuffer&); |
| 91 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; | 97 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; |
| 92 | 98 |
| 93 SkScalar computeXformedSigma(const SkMatrix& ctm) const { | 99 SkScalar computeXformedSigma(const SkMatrix& ctm) const { |
| 94 bool ignoreTransform = SkToBool(fBlurFlags & SkBlurMaskFilter::kIgnoreTr
ansform_BlurFlag); | 100 bool ignoreTransform = SkToBool(fBlurFlags & SkBlurMaskFilter::kIgnoreTr
ansform_BlurFlag); |
| 95 | 101 |
| 96 SkScalar xformedSigma = ignoreTransform ? fSigma : ctm.mapRadius(fSigma)
; | 102 SkScalar xformedSigma = ignoreTransform ? fSigma : ctm.mapRadius(fSigma)
; |
| 97 return SkMinScalar(xformedSigma, kMAX_BLUR_SIGMA); | 103 return SkMinScalar(xformedSigma, kMAX_BLUR_SIGMA); |
| 98 } | 104 } |
| 99 | 105 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 , fBlurFlags(flags) { | 144 , fBlurFlags(flags) { |
| 139 SkASSERT(fSigma > 0); | 145 SkASSERT(fSigma > 0); |
| 140 SkASSERT((unsigned)style <= kLastEnum_SkBlurStyle); | 146 SkASSERT((unsigned)style <= kLastEnum_SkBlurStyle); |
| 141 SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag); | 147 SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag); |
| 142 } | 148 } |
| 143 | 149 |
| 144 SkMask::Format SkBlurMaskFilterImpl::getFormat() const { | 150 SkMask::Format SkBlurMaskFilterImpl::getFormat() const { |
| 145 return SkMask::kA8_Format; | 151 return SkMask::kA8_Format; |
| 146 } | 152 } |
| 147 | 153 |
| 154 bool SkBlurMaskFilterImpl::asABlur(BlurRec* rec) const { |
| 155 if (fBlurFlags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag) { |
| 156 return false; |
| 157 } |
| 158 |
| 159 if (rec) { |
| 160 rec->fSigma = fSigma; |
| 161 rec->fStyle = fBlurStyle; |
| 162 rec->fQuality = this->getQuality(); |
| 163 } |
| 164 return true; |
| 165 } |
| 166 |
| 148 bool SkBlurMaskFilterImpl::filterMask(SkMask* dst, const SkMask& src, | 167 bool SkBlurMaskFilterImpl::filterMask(SkMask* dst, const SkMask& src, |
| 149 const SkMatrix& matrix, | 168 const SkMatrix& matrix, |
| 150 SkIPoint* margin) const{ | 169 SkIPoint* margin) const{ |
| 151 SkScalar sigma = this->computeXformedSigma(matrix); | 170 SkScalar sigma = this->computeXformedSigma(matrix); |
| 152 | 171 return SkBlurMask::BoxBlur(dst, src, sigma, fBlurStyle, this->getQuality(),
margin); |
| 153 SkBlurQuality blurQuality = | |
| 154 (fBlurFlags & SkBlurMaskFilter::kHighQuality_BlurFlag) ? | |
| 155 kHigh_SkBlurQuality : kLow_SkBlurQuality; | |
| 156 | |
| 157 return SkBlurMask::BoxBlur(dst, src, sigma, fBlurStyle, blurQuality, margin)
; | |
| 158 } | 172 } |
| 159 | 173 |
| 160 bool SkBlurMaskFilterImpl::filterRectMask(SkMask* dst, const SkRect& r, | 174 bool SkBlurMaskFilterImpl::filterRectMask(SkMask* dst, const SkRect& r, |
| 161 const SkMatrix& matrix, | 175 const SkMatrix& matrix, |
| 162 SkIPoint* margin, SkMask::CreateMode c
reateMode) const{ | 176 SkIPoint* margin, SkMask::CreateMode c
reateMode) const{ |
| 163 SkScalar sigma = computeXformedSigma(matrix); | 177 SkScalar sigma = computeXformedSigma(matrix); |
| 164 | 178 |
| 165 return SkBlurMask::BlurRect(sigma, dst, r, fBlurStyle, | 179 return SkBlurMask::BlurRect(sigma, dst, r, fBlurStyle, |
| 166 margin, createMode); | 180 margin, createMode); |
| 167 } | 181 } |
| (...skipping 1039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 } else { | 1221 } else { |
| 1208 str->append("None"); | 1222 str->append("None"); |
| 1209 } | 1223 } |
| 1210 str->append("))"); | 1224 str->append("))"); |
| 1211 } | 1225 } |
| 1212 #endif | 1226 #endif |
| 1213 | 1227 |
| 1214 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1228 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 1215 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1229 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 1216 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1230 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |