Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/effects/SkBlurMaskFilter.cpp

Issue 253633003: add asAShadowBlur for android to drawlooper (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: add unittests (and fix bugs in layerdrawlooper) Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/effects/SkBlurMask.cpp ('k') | src/effects/SkEmbossMaskFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « src/effects/SkBlurMask.cpp ('k') | src/effects/SkEmbossMaskFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698