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

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

Issue 112803004: Make SkImageFilter crop rects relative to the primitive origin, instead of relative to their parent (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Remove a useless zero. Created 6 years, 11 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
OLDNEW
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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 *highOffset = d / 2; 130 *highOffset = d / 2;
131 *lowOffset = *highOffset - 1; 131 *lowOffset = *highOffset - 1;
132 *kernelSize3 = d + 1; 132 *kernelSize3 = d + 1;
133 } 133 }
134 } 134 }
135 135
136 bool SkBlurImageFilter::onFilterImage(Proxy* proxy, 136 bool SkBlurImageFilter::onFilterImage(Proxy* proxy,
137 const SkBitmap& source, const SkMatrix& ct m, 137 const SkBitmap& source, const SkMatrix& ct m,
138 SkBitmap* dst, SkIPoint* offset) { 138 SkBitmap* dst, SkIPoint* offset) {
139 SkBitmap src = source; 139 SkBitmap src = source;
140 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctm, &src, offse t)) { 140 SkIPoint srcOffset = SkIPoint::Make(0, 0);
141 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctm, &src, &srcO ffset)) {
141 return false; 142 return false;
142 } 143 }
143 144
144 if (src.config() != SkBitmap::kARGB_8888_Config) { 145 if (src.config() != SkBitmap::kARGB_8888_Config) {
145 return false; 146 return false;
146 } 147 }
147 148
148 SkAutoLockPixels alp(src); 149 SkAutoLockPixels alp(src);
149 if (!src.getPixels()) { 150 if (!src.getPixels()) {
150 return false; 151 return false;
151 } 152 }
152 153
153 SkIRect srcBounds, dstBounds; 154 SkIRect srcBounds, dstBounds;
154 src.getBounds(&srcBounds); 155 src.getBounds(&srcBounds);
156 srcBounds.offset(srcOffset);
155 if (!this->applyCropRect(&srcBounds, ctm)) { 157 if (!this->applyCropRect(&srcBounds, ctm)) {
156 return false; 158 return false;
157 } 159 }
158 160
159 dst->setConfig(src.config(), srcBounds.width(), srcBounds.height()); 161 dst->setConfig(src.config(), srcBounds.width(), srcBounds.height());
160 dst->getBounds(&dstBounds); 162 dst->getBounds(&dstBounds);
161 dst->allocPixels(); 163 dst->allocPixels();
162 if (!dst->getPixels()) { 164 if (!dst->getPixels()) {
163 return false; 165 return false;
164 } 166 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); 207 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w);
206 } else if (kernelSizeX > 0) { 208 } else if (kernelSizeX > 0) {
207 boxBlurX(s, sw, d, kernelSizeX, lowOffsetX, highOffsetX, w, h); 209 boxBlurX(s, sw, d, kernelSizeX, lowOffsetX, highOffsetX, w, h);
208 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h); 210 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h);
209 boxBlurX(t, w, d, kernelSizeX3, highOffsetX, highOffsetX, w, h); 211 boxBlurX(t, w, d, kernelSizeX3, highOffsetX, highOffsetX, w, h);
210 } else if (kernelSizeY > 0) { 212 } else if (kernelSizeY > 0) {
211 boxBlurYX(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); 213 boxBlurYX(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w);
212 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); 214 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w);
213 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); 215 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w);
214 } 216 }
215 offset->fX += srcBounds.fLeft; 217 offset->fX = srcBounds.fLeft;
216 offset->fY += srcBounds.fTop; 218 offset->fY = srcBounds.fTop;
217 return true; 219 return true;
218 } 220 }
219 221
220 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, 222 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
221 SkBitmap* result, SkIPoint* offset) { 223 SkBitmap* result, SkIPoint* offset) {
222 #if SK_SUPPORT_GPU 224 #if SK_SUPPORT_GPU
223 SkBitmap input; 225 SkBitmap input;
224 if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &in put, offset)) { 226 if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &in put, offset)) {
225 return false; 227 return false;
226 } 228 }
227 GrTexture* source = input.getTexture(); 229 GrTexture* source = input.getTexture();
228 SkIRect rect; 230 SkIRect rect;
229 src.getBounds(&rect); 231 src.getBounds(&rect);
230 if (!this->applyCropRect(&rect, ctm)) { 232 if (!this->applyCropRect(&rect, ctm)) {
231 return false; 233 return false;
232 } 234 }
233 SkAutoTUnref<GrTexture> tex(SkGpuBlurUtils::GaussianBlur(source->getContext( ), 235 SkAutoTUnref<GrTexture> tex(SkGpuBlurUtils::GaussianBlur(source->getContext( ),
234 source, 236 source,
235 false, 237 false,
236 SkRect::Make(rect), 238 SkRect::Make(rect),
237 true, 239 true,
238 fSigma.width(), 240 fSigma.width(),
239 fSigma.height())); 241 fSigma.height()));
240 offset->fX += rect.fLeft; 242 offset->fX = rect.fLeft;
241 offset->fY += rect.fTop; 243 offset->fY = rect.fTop;
242 return SkImageFilterUtils::WrapTexture(tex, rect.width(), rect.height(), res ult); 244 return SkImageFilterUtils::WrapTexture(tex, rect.width(), rect.height(), res ult);
243 #else 245 #else
244 SkDEBUGFAIL("Should not call in GPU-less build"); 246 SkDEBUGFAIL("Should not call in GPU-less build");
245 return false; 247 return false;
246 #endif 248 #endif
247 } 249 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698