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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 SkIRect srcBounds, dstBounds; | 156 SkIRect srcBounds, dstBounds; |
157 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &srcBounds, &src)) { | 157 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &srcBounds, &src)) { |
158 return false; | 158 return false; |
159 } | 159 } |
160 | 160 |
161 SkAutoLockPixels alp(src); | 161 SkAutoLockPixels alp(src); |
162 if (!src.getPixels()) { | 162 if (!src.getPixels()) { |
163 return false; | 163 return false; |
164 } | 164 } |
165 | 165 |
166 dst->setConfig(src.config(), srcBounds.width(), srcBounds.height()); | 166 if (!dst->allocPixels(src.info().makeWH(srcBounds.width(), srcBounds.height(
)))) { |
167 dst->getBounds(&dstBounds); | |
168 if (!dst->allocPixels()) { | |
169 return false; | 167 return false; |
170 } | 168 } |
| 169 dst->getBounds(&dstBounds); |
171 | 170 |
172 SkVector sigma = SkVector::Make(fSigma.width(), fSigma.height()); | 171 SkVector sigma = SkVector::Make(fSigma.width(), fSigma.height()); |
173 ctx.ctm().mapVectors(&sigma, 1); | 172 ctx.ctm().mapVectors(&sigma, 1); |
174 sigma.fX = SkMinScalar(sigma.fX, MAX_SIGMA); | 173 sigma.fX = SkMinScalar(sigma.fX, MAX_SIGMA); |
175 sigma.fY = SkMinScalar(sigma.fY, MAX_SIGMA); | 174 sigma.fY = SkMinScalar(sigma.fY, MAX_SIGMA); |
176 | 175 |
177 int kernelSizeX, kernelSizeX3, lowOffsetX, highOffsetX; | 176 int kernelSizeX, kernelSizeX3, lowOffsetX, highOffsetX; |
178 int kernelSizeY, kernelSizeY3, lowOffsetY, highOffsetY; | 177 int kernelSizeY, kernelSizeY3, lowOffsetY, highOffsetY; |
179 getBox3Params(sigma.x(), &kernelSizeX, &kernelSizeX3, &lowOffsetX, &highOffs
etX); | 178 getBox3Params(sigma.x(), &kernelSizeX, &kernelSizeX3, &lowOffsetX, &highOffs
etX); |
180 getBox3Params(sigma.y(), &kernelSizeY, &kernelSizeY3, &lowOffsetY, &highOffs
etY); | 179 getBox3Params(sigma.y(), &kernelSizeY, &kernelSizeY3, &lowOffsetY, &highOffs
etY); |
181 | 180 |
182 if (kernelSizeX < 0 || kernelSizeY < 0) { | 181 if (kernelSizeX < 0 || kernelSizeY < 0) { |
183 return false; | 182 return false; |
184 } | 183 } |
185 | 184 |
186 if (kernelSizeX == 0 && kernelSizeY == 0) { | 185 if (kernelSizeX == 0 && kernelSizeY == 0) { |
187 src.copyTo(dst, dst->colorType()); | 186 src.copyTo(dst, dst->colorType()); |
188 offset->fX = srcBounds.fLeft; | 187 offset->fX = srcBounds.fLeft; |
189 offset->fY = srcBounds.fTop; | 188 offset->fY = srcBounds.fTop; |
190 return true; | 189 return true; |
191 } | 190 } |
192 | 191 |
193 SkBitmap temp; | 192 SkBitmap temp; |
194 temp.setConfig(dst->config(), dst->width(), dst->height()); | 193 if (!temp.allocPixels(dst->info())) { |
195 if (!temp.allocPixels()) { | |
196 return false; | 194 return false; |
197 } | 195 } |
198 | 196 |
199 offset->fX = srcBounds.fLeft; | 197 offset->fX = srcBounds.fLeft; |
200 offset->fY = srcBounds.fTop; | 198 offset->fY = srcBounds.fTop; |
201 srcBounds.offset(-srcOffset); | 199 srcBounds.offset(-srcOffset); |
202 const SkPMColor* s = src.getAddr32(srcBounds.left(), srcBounds.top()); | 200 const SkPMColor* s = src.getAddr32(srcBounds.left(), srcBounds.top()); |
203 SkPMColor* t = temp.getAddr32(0, 0); | 201 SkPMColor* t = temp.getAddr32(0, 0); |
204 SkPMColor* d = dst->getAddr32(0, 0); | 202 SkPMColor* d = dst->getAddr32(0, 0); |
205 int w = dstBounds.width(), h = dstBounds.height(); | 203 int w = dstBounds.width(), h = dstBounds.height(); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 true, | 282 true, |
285 sigma.x(), | 283 sigma.x(), |
286 sigma.y())); | 284 sigma.y())); |
287 WrapTexture(tex, rect.width(), rect.height(), result); | 285 WrapTexture(tex, rect.width(), rect.height(), result); |
288 return true; | 286 return true; |
289 #else | 287 #else |
290 SkDEBUGFAIL("Should not call in GPU-less build"); | 288 SkDEBUGFAIL("Should not call in GPU-less build"); |
291 return false; | 289 return false; |
292 #endif | 290 #endif |
293 } | 291 } |
OLD | NEW |