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/SkMagnifierImageFilter.cpp

Issue 1225923010: Refugee from Dead Machine 4: MDB Monster Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Last update from dead machine Created 4 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
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.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 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 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 "SkMagnifierImageFilter.h" 9 #include "SkMagnifierImageFilter.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 15 matching lines...) Expand all
26 class GrMagnifierEffect : public GrSingleTextureEffect { 26 class GrMagnifierEffect : public GrSingleTextureEffect {
27 27
28 public: 28 public:
29 static GrFragmentProcessor* Create(GrTexture* texture, 29 static GrFragmentProcessor* Create(GrTexture* texture,
30 const SkRect& bounds, 30 const SkRect& bounds,
31 float xOffset, 31 float xOffset,
32 float yOffset, 32 float yOffset,
33 float xInvZoom, 33 float xInvZoom,
34 float yInvZoom, 34 float yInvZoom,
35 float xInvInset, 35 float xInvInset,
36 float yInvInset) { 36 float yInvInset,
37 return new GrMagnifierEffect(texture, bounds, xOffset, yOffset, xInvZoom , yInvZoom, xInvInset, 37 GrRenderTarget* dst) {
38 yInvInset); 38 return new GrMagnifierEffect(texture, bounds, xOffset, yOffset, xInvZoom ,
39 yInvZoom, xInvInset, yInvInset, dst);
39 } 40 }
40 41
41 virtual ~GrMagnifierEffect() {}; 42 virtual ~GrMagnifierEffect() {};
42 43
43 const char* name() const override { return "Magnifier"; } 44 const char* name() const override { return "Magnifier"; }
44 45
45 const SkRect& bounds() const { return fBounds; } // Bounds of source imag e. 46 const SkRect& bounds() const { return fBounds; } // Bounds of source imag e.
46 // Offset to apply to zoomed pixels, (srcRect position / texture size). 47 // Offset to apply to zoomed pixels, (srcRect position / texture size).
47 float x_offset() const { return fXOffset; } 48 float x_offset() const { return fXOffset; }
48 float y_offset() const { return fYOffset; } 49 float y_offset() const { return fYOffset; }
49 50
50 // Scale to apply to zoomed pixels (srcRect size / bounds size). 51 // Scale to apply to zoomed pixels (srcRect size / bounds size).
51 float x_inv_zoom() const { return fXInvZoom; } 52 float x_inv_zoom() const { return fXInvZoom; }
52 float y_inv_zoom() const { return fYInvZoom; } 53 float y_inv_zoom() const { return fYInvZoom; }
53 54
54 // 1/radius over which to transition from unzoomed to zoomed pixels (bounds size / inset). 55 // 1/radius over which to transition from unzoomed to zoomed pixels (bounds size / inset).
55 float x_inv_inset() const { return fXInvInset; } 56 float x_inv_inset() const { return fXInvInset; }
56 float y_inv_inset() const { return fYInvInset; } 57 float y_inv_inset() const { return fYInvInset; }
57 58
58 private: 59 private:
59 GrMagnifierEffect(GrTexture* texture, 60 GrMagnifierEffect(GrTexture* texture,
60 const SkRect& bounds, 61 const SkRect& bounds,
61 float xOffset, 62 float xOffset,
62 float yOffset, 63 float yOffset,
63 float xInvZoom, 64 float xInvZoom,
64 float yInvZoom, 65 float yInvZoom,
65 float xInvInset, 66 float xInvInset,
66 float yInvInset) 67 float yInvInset, GrRenderTarget* dst)
67 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture) ) 68 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture) , kLocal_GrCoordSet, dst)
68 , fBounds(bounds) 69 , fBounds(bounds)
69 , fXOffset(xOffset) 70 , fXOffset(xOffset)
70 , fYOffset(yOffset) 71 , fYOffset(yOffset)
71 , fXInvZoom(xInvZoom) 72 , fXInvZoom(xInvZoom)
72 , fYInvZoom(yInvZoom) 73 , fYInvZoom(yInvZoom)
73 , fXInvInset(xInvInset) 74 , fXInvInset(xInvInset)
74 , fYInvInset(yInvInset) { 75 , fYInvInset(yInvInset) {
75 this->initClassID<GrMagnifierEffect>(); 76 this->initClassID<GrMagnifierEffect>();
76 } 77 }
77 78
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 uint32_t inset = d->fRandom->nextULessThan(kMaxInset); 205 uint32_t inset = d->fRandom->nextULessThan(kMaxInset);
205 206
206 GrFragmentProcessor* effect = GrMagnifierEffect::Create( 207 GrFragmentProcessor* effect = GrMagnifierEffect::Create(
207 texture, 208 texture,
208 SkRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight)), 209 SkRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight)),
209 (float) width / texture->width(), 210 (float) width / texture->width(),
210 (float) height / texture->height(), 211 (float) height / texture->height(),
211 texture->width() / (float) x, 212 texture->width() / (float) x,
212 texture->height() / (float) y, 213 texture->height() / (float) y,
213 (float) inset / texture->width(), 214 (float) inset / texture->width(),
214 (float) inset / texture->height()); 215 (float) inset / texture->height(), NULL);
215 SkASSERT(effect); 216 SkASSERT(effect);
216 return effect; 217 return effect;
217 } 218 }
218 219
219 /////////////////////////////////////////////////////////////////////////////// 220 ///////////////////////////////////////////////////////////////////////////////
220 221
221 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const { 222 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
222 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>(); 223 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>();
223 return (this->fBounds == s.fBounds && 224 return (this->fBounds == s.fBounds &&
224 this->fXOffset == s.fXOffset && 225 this->fXOffset == s.fXOffset &&
(...skipping 28 matching lines...) Expand all
253 254
254 SkMagnifierImageFilter::SkMagnifierImageFilter(const SkRect& srcRect, SkScalar i nset, 255 SkMagnifierImageFilter::SkMagnifierImageFilter(const SkRect& srcRect, SkScalar i nset,
255 SkImageFilter* input) 256 SkImageFilter* input)
256 : INHERITED(1, &input), fSrcRect(srcRect), fInset(inset) { 257 : INHERITED(1, &input), fSrcRect(srcRect), fInset(inset) {
257 SkASSERT(srcRect.x() >= 0 && srcRect.y() >= 0 && inset >= 0); 258 SkASSERT(srcRect.x() >= 0 && srcRect.y() >= 0 && inset >= 0);
258 } 259 }
259 260
260 #if SK_SUPPORT_GPU 261 #if SK_SUPPORT_GPU
261 bool SkMagnifierImageFilter::asFragmentProcessor(GrFragmentProcessor** fp, 262 bool SkMagnifierImageFilter::asFragmentProcessor(GrFragmentProcessor** fp,
262 GrTexture* texture, const SkMat rix&, 263 GrTexture* texture, const SkMat rix&,
263 const SkIRect&bounds) const { 264 const SkIRect&bounds, GrRenderT arget* dst) const {
264 if (fp) { 265 if (fp) {
265 SkScalar yOffset = texture->origin() == kTopLeft_GrSurfaceOrigin ? fSrcR ect.y() : 266 SkScalar yOffset = texture->origin() == kTopLeft_GrSurfaceOrigin ? fSrcR ect.y() :
266 texture->height() - fSrcRect.height() * texture->height() / bounds.he ight() 267 texture->height() - fSrcRect.height() * texture->height() / bounds.he ight()
267 - fSrcRect.y(); 268 - fSrcRect.y();
268 int boundsY = (texture->origin() == kTopLeft_GrSurfaceOrigin) ? bounds.y () : 269 int boundsY = (texture->origin() == kTopLeft_GrSurfaceOrigin) ? bounds.y () :
269 (texture->height() - bounds.height()); 270 (texture->height() - bounds.height());
270 SkRect effectBounds = SkRect::MakeXYWH( 271 SkRect effectBounds = SkRect::MakeXYWH(
271 SkIntToScalar(bounds.x()) / texture->width(), 272 SkIntToScalar(bounds.x()) / texture->width(),
272 SkIntToScalar(boundsY) / texture->height(), 273 SkIntToScalar(boundsY) / texture->height(),
273 SkIntToScalar(texture->width()) / bounds.width(), 274 SkIntToScalar(texture->width()) / bounds.width(),
274 SkIntToScalar(texture->height()) / bounds.height()); 275 SkIntToScalar(texture->height()) / bounds.height());
275 SkScalar invInset = fInset > 0 ? SkScalarInvert(fInset) : SK_Scalar1; 276 SkScalar invInset = fInset > 0 ? SkScalarInvert(fInset) : SK_Scalar1;
276 *fp = GrMagnifierEffect::Create(texture, 277 *fp = GrMagnifierEffect::Create(texture,
277 effectBounds, 278 effectBounds,
278 fSrcRect.x() / texture->width(), 279 fSrcRect.x() / texture->width(),
279 yOffset / texture->height(), 280 yOffset / texture->height(),
280 fSrcRect.width() / bounds.width(), 281 fSrcRect.width() / bounds.width(),
281 fSrcRect.height() / bounds.height(), 282 fSrcRect.height() / bounds.height(),
282 bounds.width() * invInset, 283 bounds.width() * invInset,
283 bounds.height() * invInset); 284 bounds.height() * invInset, dst);
284 } 285 }
285 return true; 286 return true;
286 } 287 }
287 #endif 288 #endif
288 289
289 SkFlattenable* SkMagnifierImageFilter::CreateProc(SkReadBuffer& buffer) { 290 SkFlattenable* SkMagnifierImageFilter::CreateProc(SkReadBuffer& buffer) {
290 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 291 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
291 SkRect src; 292 SkRect src;
292 buffer.readRect(&src); 293 buffer.readRect(&src);
293 return Create(src, buffer.readScalar(), common.getInput(0)); 294 return Create(src, buffer.readScalar(), common.getInput(0));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 371
371 #ifndef SK_IGNORE_TO_STRING 372 #ifndef SK_IGNORE_TO_STRING
372 void SkMagnifierImageFilter::toString(SkString* str) const { 373 void SkMagnifierImageFilter::toString(SkString* str) const {
373 str->appendf("SkMagnifierImageFilter: ("); 374 str->appendf("SkMagnifierImageFilter: (");
374 str->appendf("src: (%f,%f,%f,%f) ", 375 str->appendf("src: (%f,%f,%f,%f) ",
375 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto m); 376 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto m);
376 str->appendf("inset: %f", fInset); 377 str->appendf("inset: %f", fInset);
377 str->append(")"); 378 str->append(")");
378 } 379 }
379 #endif 380 #endif
OLDNEW
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698