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

Side by Side Diff: gm/reveal.cpp

Issue 2344963002: Fix color bug in SkRRectsGaussianEdgeShader (Closed)
Patch Set: Add new constant to GM Created 4 years, 3 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 | « no previous file | include/effects/SkRRectsGaussianEdgeShader.h » ('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 2016 Google Inc. 2 * Copyright 2016 Google Inc.
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 "gm.h" 8 #include "gm.h"
9 #include "SkAnimTimer.h" 9 #include "SkAnimTimer.h"
10 #include "SkBlurMaskFilter.h" 10 #include "SkBlurMaskFilter.h"
11 #include "SkGaussianEdgeShader.h" 11 #include "SkGaussianEdgeShader.h"
12 #include "SkRRectsGaussianEdgeShader.h" 12 #include "SkRRectsGaussianEdgeShader.h"
13 #include "SkPath.h" 13 #include "SkPath.h"
14 #include "SkPathOps.h" 14 #include "SkPathOps.h"
15 #include "SkRRect.h" 15 #include "SkRRect.h"
16 #include "SkStroke.h" 16 #include "SkStroke.h"
17 17
18 constexpr int kNumCols = 2; 18 constexpr int kNumCols = 2;
19 constexpr int kNumRows = 5; 19 constexpr int kNumRows = 5;
20 constexpr int kCellSize = 128; 20 constexpr int kCellSize = 128;
21 constexpr SkScalar kPad = 8.0f; 21 constexpr SkScalar kPad = 8.0f;
22 constexpr SkScalar kBlurRadius = 8.0f;
22 constexpr SkScalar kPeriod = 8.0f; 23 constexpr SkScalar kPeriod = 8.0f;
23 constexpr int kClipOffset = 32; 24 constexpr int kClipOffset = 32;
24 25
25 //////////////////////////////////////////////////////////////////////////////// /////////////////// 26 //////////////////////////////////////////////////////////////////////////////// ///////////////////
26 27
27 class Object { 28 class Object {
28 public: 29 public:
29 virtual ~Object() {} 30 virtual ~Object() {}
30 virtual bool asRRect(SkRRect* rr) const = 0; 31 virtual bool asRRect(SkRRect* rr) const = 0;
31 virtual SkPath asPath(SkScalar inset) const = 0; 32 virtual SkPath asPath(SkScalar inset) const = 0;
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 // The goal is to replace this clipped draw (which clips the 342 // The goal is to replace this clipped draw (which clips the
342 // shadow) with a draw using the geometric clip 343 // shadow) with a draw using the geometric clip
343 if (kGaussianEdge_Mode == fMode) { 344 if (kGaussianEdge_Mode == fMode) {
344 canvas->save(); 345 canvas->save();
345 clipObj->clip(canvas); 346 clipObj->clip(canvas);
346 347
347 // Draw with GaussianEdgeShader 348 // Draw with GaussianEdgeShader
348 SkPaint paint; 349 SkPaint paint;
349 paint.setAntiAlias(true); 350 paint.setAntiAlias(true);
350 // G channel is an F6.2 radius 351 // G channel is an F6.2 radius
351 paint.setColor(SkColorSetARGB(255, 0, (unsigned char)(4* kPad), 0)); 352 paint.setColor(SkColorSetARGB(255, 0, (unsigned char)(4* kBlurRadius), 0));
352 paint.setShader(SkGaussianEdgeShader::Make()); 353 paint.setShader(SkGaussianEdgeShader::Make());
353 drawObj->draw(canvas, paint); 354 drawObj->draw(canvas, paint);
354 canvas->restore(); 355 canvas->restore();
355 } else if (kBlurMask_Mode == fMode) { 356 } else if (kBlurMask_Mode == fMode) {
356 SkPath clippedPath; 357 SkPath clippedPath;
357 358
358 SkScalar sigma = kPad / 4.0f; 359 SkScalar sigma = kBlurRadius / 4.0f;
359 360
360 if (clipObj->contains(drawObj->bounds())) { 361 if (clipObj->contains(drawObj->bounds())) {
361 clippedPath = drawObj->asPath(2.0f*sigma); 362 clippedPath = drawObj->asPath(2.0f*sigma);
362 } else { 363 } else {
363 SkPath drawnPath = drawObj->asPath(2.0f*sigma); 364 SkPath drawnPath = drawObj->asPath(2.0f*sigma);
364 SkPath clipPath = clipObj->asPath(2.0f*sigma); 365 SkPath clipPath = clipObj->asPath(2.0f*sigma);
365 366
366 SkAssertResult(Op(clipPath, drawnPath, kIntersect_SkPath Op, &clippedPath)); 367 SkAssertResult(Op(clipPath, drawnPath, kIntersect_SkPath Op, &clippedPath));
367 } 368 }
368 369
369 SkPaint blurPaint; 370 SkPaint blurPaint;
370 blurPaint.setAntiAlias(true); 371 blurPaint.setAntiAlias(true);
371 blurPaint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlu rStyle, sigma)); 372 blurPaint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlu rStyle, sigma));
372 canvas->drawPath(clippedPath, blurPaint); 373 canvas->drawPath(clippedPath, blurPaint);
373 } else { 374 } else {
374 SkASSERT(kRRectsGaussianEdge_Mode == fMode); 375 SkASSERT(kRRectsGaussianEdge_Mode == fMode);
375 376
376 SkRect cover = drawObj->bounds(); 377 SkRect cover = drawObj->bounds();
377 SkAssertResult(cover.intersect(clipObj->bounds())); 378 SkAssertResult(cover.intersect(clipObj->bounds()));
378 379
379 SkPaint paint; 380 SkPaint paint;
380 381
381 SkRRect clipRR, drawnRR; 382 SkRRect clipRR, drawnRR;
382 383
383 if (clipObj->asRRect(&clipRR) && drawObj->asRRect(&drawnRR)) { 384 if (clipObj->asRRect(&clipRR) && drawObj->asRRect(&drawnRR)) {
384 paint.setShader(SkRRectsGaussianEdgeShader::Make(clipRR, drawnRR, 385 paint.setShader(SkRRectsGaussianEdgeShader::Make(clipRR, drawnRR,
385 kPad, 0 .0f)); 386 kBlurRa dius));
386 } 387 }
387 388
388 canvas->drawRect(cover, paint); 389 canvas->drawRect(cover, paint);
389 } 390 }
390 391
391 // Draw the clip and draw objects for reference 392 // Draw the clip and draw objects for reference
392 SkPaint strokePaint; 393 SkPaint strokePaint;
393 strokePaint.setStyle(SkPaint::kStroke_Style); 394 strokePaint.setStyle(SkPaint::kStroke_Style);
394 strokePaint.setStrokeWidth(0); 395 strokePaint.setStrokeWidth(0);
395 strokePaint.setColor(SK_ColorRED); 396 strokePaint.setColor(SK_ColorRED);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 Mode fMode; 428 Mode fMode;
428 bool fPause; 429 bool fPause;
429 430
430 typedef GM INHERITED; 431 typedef GM INHERITED;
431 }; 432 };
432 433
433 ////////////////////////////////////////////////////////////////////////////// 434 //////////////////////////////////////////////////////////////////////////////
434 435
435 DEF_GM(return new RevealGM;) 436 DEF_GM(return new RevealGM;)
436 } 437 }
OLDNEW
« no previous file with comments | « no previous file | include/effects/SkRRectsGaussianEdgeShader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698