| 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);
|
| + }
|
| }
|
| }
|
| }
|
|
|