OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The Android Open Source Project | 2 * Copyright 2011 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
9 #include "SkBlurImageFilter.h" | 9 #include "SkBlurImageFilter.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 *lowOffset = *highOffset - 1; | 142 *lowOffset = *highOffset - 1; |
143 *kernelSize3 = d + 1; | 143 *kernelSize3 = d + 1; |
144 } | 144 } |
145 } | 145 } |
146 | 146 |
147 bool SkBlurImageFilter::onFilterImage(Proxy* proxy, | 147 bool SkBlurImageFilter::onFilterImage(Proxy* proxy, |
148 const SkBitmap& source, const Context& ctx
, | 148 const SkBitmap& source, const Context& ctx
, |
149 SkBitmap* dst, SkIPoint* offset) const { | 149 SkBitmap* dst, SkIPoint* offset) const { |
150 SkBitmap src = source; | 150 SkBitmap src = source; |
151 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 151 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
152 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctx, &src, &srcO
ffset)) { | 152 if (this->getInput(0) && |
| 153 !this->getInput(0)->filterImage(proxy, source, ctx, &src, &srcOffset)) { |
153 return false; | 154 return false; |
154 } | 155 } |
155 | 156 |
156 if (src.colorType() != kN32_SkColorType) { | 157 if (src.colorType() != kN32_SkColorType) { |
157 return false; | 158 return false; |
158 } | 159 } |
159 | 160 |
160 SkIRect srcBounds, dstBounds; | 161 SkIRect srcBounds, dstBounds; |
161 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &srcBounds, &src)) { | 162 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &srcBounds, &src)) { |
162 return false; | 163 return false; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 } else if (kernelSizeY > 0) { | 225 } else if (kernelSizeY > 0) { |
225 boxBlurYX(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); | 226 boxBlurYX(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); |
226 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); | 227 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); |
227 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); | 228 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); |
228 } | 229 } |
229 return true; | 230 return true; |
230 } | 231 } |
231 | 232 |
232 | 233 |
233 void SkBlurImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const
{ | 234 void SkBlurImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const
{ |
234 if (getInput(0)) { | 235 if (this->getInput(0)) { |
235 getInput(0)->computeFastBounds(src, dst); | 236 this->getInput(0)->computeFastBounds(src, dst); |
236 } else { | 237 } else { |
237 *dst = src; | 238 *dst = src; |
238 } | 239 } |
239 | 240 |
240 dst->outset(SkScalarMul(fSigma.width(), SkIntToScalar(3)), | 241 dst->outset(SkScalarMul(fSigma.width(), SkIntToScalar(3)), |
241 SkScalarMul(fSigma.height(), SkIntToScalar(3))); | 242 SkScalarMul(fSigma.height(), SkIntToScalar(3))); |
242 } | 243 } |
243 | 244 |
244 bool SkBlurImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, | 245 bool SkBlurImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, |
245 SkIRect* dst) const { | 246 SkIRect* dst) const { |
246 SkIRect bounds = src; | 247 SkIRect bounds = src; |
247 SkVector sigma = mapSigma(fSigma, ctm); | 248 SkVector sigma = mapSigma(fSigma, ctm); |
248 bounds.outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), | 249 bounds.outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), |
249 SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); | 250 SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); |
250 if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { | 251 if (this->getInput(0) && !this->getInput(0)->filterBounds(bounds, ctm, &boun
ds)) { |
251 return false; | 252 return false; |
252 } | 253 } |
253 *dst = bounds; | 254 *dst = bounds; |
254 return true; | 255 return true; |
255 } | 256 } |
256 | 257 |
257 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
Context& ctx, | 258 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
Context& ctx, |
258 SkBitmap* result, SkIPoint* offset) const
{ | 259 SkBitmap* result, SkIPoint* offset) const
{ |
259 #if SK_SUPPORT_GPU | 260 #if SK_SUPPORT_GPU |
260 SkBitmap input = src; | 261 SkBitmap input = src; |
261 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 262 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
262 if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctx, &input,
&srcOffset)) { | 263 if (this->getInput(0) && |
| 264 !this->getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffse
t)) { |
263 return false; | 265 return false; |
264 } | 266 } |
265 SkIRect rect; | 267 SkIRect rect; |
266 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &rect, &input)) { | 268 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &rect, &input)) { |
267 return false; | 269 return false; |
268 } | 270 } |
269 GrTexture* source = input.getTexture(); | 271 GrTexture* source = input.getTexture(); |
270 SkVector sigma = mapSigma(fSigma, ctx.ctm()); | 272 SkVector sigma = mapSigma(fSigma, ctx.ctm()); |
271 offset->fX = rect.fLeft; | 273 offset->fX = rect.fLeft; |
272 offset->fY = rect.fTop; | 274 offset->fY = rect.fTop; |
(...skipping 21 matching lines...) Expand all Loading... |
294 str->appendf("SkBlurImageFilter: ("); | 296 str->appendf("SkBlurImageFilter: ("); |
295 str->appendf("sigma: (%f, %f) input (", fSigma.fWidth, fSigma.fHeight); | 297 str->appendf("sigma: (%f, %f) input (", fSigma.fWidth, fSigma.fHeight); |
296 | 298 |
297 if (this->getInput(0)) { | 299 if (this->getInput(0)) { |
298 this->getInput(0)->toString(str); | 300 this->getInput(0)->toString(str); |
299 } | 301 } |
300 | 302 |
301 str->append("))"); | 303 str->append("))"); |
302 } | 304 } |
303 #endif | 305 #endif |
OLD | NEW |