Index: gm/blurroundrect.cpp |
diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp |
index d78335f2a6e95bd565ea72e975a6f71f04577b7d..1819ac2edd57e4bf35632849de77ceaf60c64c39 100644 |
--- a/gm/blurroundrect.cpp |
+++ b/gm/blurroundrect.cpp |
@@ -92,6 +92,32 @@ private: |
typedef skiagm::GM INHERITED; |
}; |
+#include "SkGradientShader.h" |
+/* |
+ * Spits out a dummy gradient to test blur with shader on paint |
+ */ |
+static SkShader* MakeRadial() { |
+ SkPoint pts[2] = { |
+ { 0, 0 }, |
+ { SkIntToScalar(100), SkIntToScalar(100) } |
+ }; |
+ SkShader::TileMode tm = SkShader::kClamp_TileMode; |
+ const SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, }; |
+ const SkScalar pos[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; |
+ SkMatrix scale; |
+ scale.setScale(0.5f, 0.5f); |
+ scale.postTranslate(5.f, 5.f); |
+ SkPoint center0, center1; |
+ center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
+ SkScalarAve(pts[0].fY, pts[1].fY)); |
+ center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
+ SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
+ return SkGradientShader::CreateTwoPointRadial(center1, (pts[1].fX - pts[0].fX) / 7, |
+ center0, (pts[1].fX - pts[0].fX) / 2, |
+ colors, pos, SK_ARRAY_COUNT(colors), tm, |
+ 0, &scale); |
+} |
+ |
// Simpler blurred RR test cases where all the radii are the same. |
class SimpleBlurRoundRectGM : public skiagm::GM { |
public: |
@@ -100,12 +126,16 @@ public: |
} |
protected: |
+ virtual uint32_t onGetFlags() const SK_OVERRIDE { |
+ return kSkipTiled_Flag; |
+ } |
+ |
virtual SkString onShortName() SK_OVERRIDE { |
return fName; |
} |
virtual SkISize onISize() SK_OVERRIDE { |
- return SkISize::Make(950, 950); |
+ return SkISize::Make(1000, 500); |
} |
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
@@ -114,23 +144,31 @@ protected: |
const float blurRadii[] = { 1,5,10,20 }; |
const int cornerRadii[] = { 1,5,10,20 }; |
- const SkRect r = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100)); |
+ const SkRect r = SkRect::MakeWH(SkIntToScalar(25), SkIntToScalar(25)); |
for (size_t i = 0; i < SK_ARRAY_COUNT(blurRadii); ++i) { |
SkAutoCanvasRestore autoRestore(canvas, true); |
canvas->translate(0, (r.height() + SkIntToScalar(50)) * i); |
for (size_t j = 0; j < SK_ARRAY_COUNT(cornerRadii); ++j) { |
- SkMaskFilter* filter = SkBlurMaskFilter::Create( |
- kNormal_SkBlurStyle, |
- SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])), |
- SkBlurMaskFilter::kHighQuality_BlurFlag); |
- SkPaint paint; |
- paint.setColor(SK_ColorBLACK); |
- paint.setMaskFilter(filter)->unref(); |
- |
- SkRRect rrect; |
- rrect.setRectXY(r, SkIntToScalar(cornerRadii[j]), SkIntToScalar(cornerRadii[j])); |
- canvas->drawRRect(rrect, paint); |
- canvas->translate(r.width() + SkIntToScalar(50), 0); |
+ for (int k = 0; k <= 1; k++) { |
+ SkMaskFilter* filter = SkBlurMaskFilter::Create( |
+ kNormal_SkBlurStyle, |
+ SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(blurRadii[i])), |
+ SkBlurMaskFilter::kHighQuality_BlurFlag); |
+ SkPaint paint; |
+ paint.setColor(SK_ColorBLACK); |
+ paint.setMaskFilter(filter)->unref(); |
+ |
+ bool useRadial = SkToBool(k); |
+ if (useRadial) { |
+ paint.setShader(MakeRadial())->unref(); |
+ } |
+ |
+ SkRRect rrect; |
+ rrect.setRectXY(r, SkIntToScalar(cornerRadii[j]), |
+ SkIntToScalar(cornerRadii[j])); |
+ canvas->drawRRect(rrect, paint); |
+ canvas->translate(r.width() + SkIntToScalar(50), 0); |
+ } |
} |
} |
} |