blurroundrect.cpp revision 5fdef98f627697966763b88d770a8a8e45c8197a
17b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com/*
27b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com* Copyright 2013 Google Inc.
37b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com*
47b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com* Use of this source code is governed by a BSD-style license that can be
57b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com* found in the LICENSE file.
67b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com*/
77b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
87b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "gm.h"
97b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkBlurMask.h"
107b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkBlurMaskFilter.h"
117b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkCanvas.h"
127b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkColorFilter.h"
137b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkLayerDrawLooper.h"
147b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkPaint.h"
157b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkPath.h"
167b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkPoint.h"
177b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkRect.h"
187b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkRRect.h"
197b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkString.h"
207b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com#include "SkXfermode.h"
217b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
227b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comclass BlurRoundRectGM : public skiagm::GM {
237b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.compublic:
247b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    BlurRoundRectGM(int width, int height,
257b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    // X and Y radii for the upper left corner
267b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    int ulX, int ulY,
277b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    // X and Y radii for the upper right corner
287b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    int urX, int urY,
297b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    // X and Y radii for the lower right corner
307b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    int lrX, int lrY,
317b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    // X and Y radii for the lower left corner
327b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    int llX, int llY,
337b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    int scaleX, int scaleY)
347b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        : fName("blurroundrect")
357b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        , fWidth(width)
367b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        , fHeight(height)
377b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        , fScaleX(scaleX)
387b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        , fScaleY(scaleY) {
397b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        fName.appendf("-WH[%ix%i]-UL[%ix%i]-UR[%ix%i]-LR[%ix%i]-LL[%ix%i]-scale[%ix%i]",
407b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      width,  height,
417b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      ulX,    ulY,
427b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      urX,    urY,
437b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      lrX,    lrY,
447b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      llX,    llY,
457b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                      scaleX, scaleY);
467b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkVector radii[4];
477b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        radii[0].set(SkIntToScalar(ulX), SkIntToScalar(ulY));
487b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        radii[1].set(SkIntToScalar(urX), SkIntToScalar(urY));
497b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        radii[2].set(SkIntToScalar(lrX), SkIntToScalar(lrY));
507b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        radii[3].set(SkIntToScalar(llX), SkIntToScalar(llY));
517b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkRect r = SkRect::MakeWH(fWidth, fHeight);
527b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        fRRect.setRectRadii(r, radii);
537b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
547b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
557b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual SkString onShortName() SK_OVERRIDE {
567b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        return fName;
577b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
587b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
597b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual SkISize onISize() SK_OVERRIDE {
607b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkISize size = this->getUnscaledSize();
617b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        return SkISize::Make(SkScalarCeilToInt(SkScalarMul(size.fWidth, fScaleX)),
627b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                             SkScalarCeilToInt(SkScalarMul(size.fHeight, fScaleY)));
637b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
647b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
657b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
667b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        canvas->scale(fScaleX, fScaleY);
677b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
687b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
697b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const SkRRect& getRRect() const {
707b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        return fRRect;
717b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
727b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
737b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    // The subclass will implement this to inform us how big they
747b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    // draw before scaling.
757b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual SkISize getUnscaledSize() const = 0;
767b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
777b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    // So subclasses can modify the name.
787b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    SkString* getName() {
797b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        return &fName;
807b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
817b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
827b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comprivate:
837b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    SkString fName;
847b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const int fWidth;
857b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const int fHeight;
867b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const SkScalar fScaleX;
877b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const SkScalar fScaleY;
887b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    SkRRect fRRect;
897b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    typedef skiagm::GM INHERITED;
907b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com};
917b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
927b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comclass SKPBlurRoundRectGM : public BlurRoundRectGM {
937b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.compublic:
947b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    SKPBlurRoundRectGM(int width, int height,
957b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                       int ulX, int ulY,
967b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                       int urX, int urY,
977b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                       int lrX, int lrY,
987b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                       int llX, int llY,
997b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                       int scaleX, int scaleY)
1007b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        : INHERITED(width, height, ulX, ulY, urX, urY, lrX, lrY, llX, llY, scaleX, scaleY) {
1017b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        this->getName()->prepend("skp-");
1027b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1037b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1047b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comprotected:
1057b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual SkISize getUnscaledSize() const SK_OVERRIDE {
10628f43dbee2ed72289c9cad107c4d652c20593b4dscroggo@google.com        return SkISize::Make(SkScalarCeilToInt(this->getRRect().rect().width()),
10728f43dbee2ed72289c9cad107c4d652c20593b4dscroggo@google.com                             SkScalarCeilToInt(this->getRRect().rect().height()));
1087b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1097b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1107b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
1117b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        this->INHERITED::onDraw(canvas);
1127b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkLayerDrawLooper* looper = new SkLayerDrawLooper;
1137b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        {
1147b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            SkLayerDrawLooper::LayerInfo info;
1157b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            info.fFlagsMask = 0;
1167b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            info.fPaintBits = 40;
1177b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            info.fColorMode = SkXfermode::kSrc_Mode;
1187b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            info.fOffset = SkPoint::Make(SkIntToScalar(-1), SkIntToScalar(0));
1197b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            info.fPostTranslate = false;
1207b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            SkPaint* paint = looper->addLayerOnTop(info);
1217b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            SkMaskFilter* maskFilter = SkBlurMaskFilter::Create(SK_ScalarHalf,
1227b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    SkBlurMaskFilter::kNormal_BlurStyle,
1237b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    SkBlurMaskFilter::kHighQuality_BlurFlag);
1247b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            paint->setMaskFilter(maskFilter)->unref();
1255fdef98f627697966763b88d770a8a8e45c8197ascroggo@google.com            SkColorFilter* colorFilter = SkColorFilter::CreateModeFilter(SK_ColorLTGRAY,
1267b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    SkXfermode::kSrcIn_Mode);
1277b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            paint->setColorFilter(colorFilter)->unref();
1285fdef98f627697966763b88d770a8a8e45c8197ascroggo@google.com            paint->setColor(SK_ColorGRAY);
1297b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        }
1307b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        {
1317b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            SkLayerDrawLooper::LayerInfo info;
1327b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com            looper->addLayerOnTop(info);
1337b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        }
1347b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkPaint paint;
1357b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        canvas->drawRect(this->getRRect().rect(), paint);
1367b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1377b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        paint.setLooper(looper)->unref();
1385fdef98f627697966763b88d770a8a8e45c8197ascroggo@google.com        paint.setColor(SK_ColorCYAN);
1397b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        paint.setAntiAlias(true);
1407b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1417b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        canvas->drawRRect(this->getRRect(), paint);
1427b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1437b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1447b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comprivate:
1457b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    typedef BlurRoundRectGM INHERITED;
1467b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com};
1477b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1487b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comclass SimpleBlurRoundRectGM : public BlurRoundRectGM {
1497b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.compublic:
1507b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    SimpleBlurRoundRectGM(int width, int height,
1517b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                          int blurRadius, int cornerRadius,
1527b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                          int scaleX = 1, int scaleY = 1)
1537b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        : INHERITED(width, height, cornerRadius, cornerRadius,
1547b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    cornerRadius, cornerRadius, cornerRadius,
1557b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                    cornerRadius, cornerRadius, cornerRadius, scaleX, scaleY)
1567b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        , fBlurRadius(blurRadius) {
1577b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        // For now at least, change the name to reflect only the
1587b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        // variables that are changing.
1597b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        this->getName()->printf("blurround-blur[%i]-corner[%i]-scale[%ix%i]", fBlurRadius, cornerRadius, scaleX, scaleY);
1607b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1617b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1627b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comprotected:
1637b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual SkISize getUnscaledSize() const SK_OVERRIDE {
16428f43dbee2ed72289c9cad107c4d652c20593b4dscroggo@google.com        return SkISize::Make(SkScalarCeilToInt(this->getRRect().rect().width() + 20),
16528f43dbee2ed72289c9cad107c4d652c20593b4dscroggo@google.com                             SkScalarCeilToInt(this->getRRect().rect().height() + 20));
1667b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1677b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1687b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
1697b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        // Handle the scaling.
1707b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        this->INHERITED::onDraw(canvas);
1717b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        canvas->translate(10, 10);
1727b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkMaskFilter* filter = SkBlurMaskFilter::Create(fBlurRadius,
1737b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com                SkBlurMaskFilter::kNormal_BlurStyle);
1747b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        SkPaint paint;
1757b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        paint.setColor(SK_ColorBLUE);
1767b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        paint.setMaskFilter(filter)->unref();
1777b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com        canvas->drawRRect(this->getRRect(), paint);
1787b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    }
1797b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comprivate:
1807b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    const int fBlurRadius;
1817b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1827b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com    typedef BlurRoundRectGM INHERITED;
1837b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com};
1847b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1857b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Create one with dimensions/rounded corners based on the skp
1867b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SKPBlurRoundRectGM(600, 5514, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1);)
1877b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Same radii, much smaller rectangle
1887b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SKPBlurRoundRectGM(100, 100, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2);)
1897b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Rounded rect with two opposite corners with large radii, the other two
1907b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// small.
1917b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SKPBlurRoundRectGM(100, 100, 30, 30, 10, 10, 30, 30, 10, 10, 3, 4);)
1927b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SKPBlurRoundRectGM(100, 100, 90, 90, 90, 90, 90, 90, 90, 90, 2, 3);)
1937b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
1947b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Try a few blur values with a small corner radius
1957b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 1));
1967b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 1, 2, 2));
1977b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 1));
1987b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 1, 3, 3));
1997b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
2007b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Now a few blur values with a larger corner radius
2017b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 3, 2, 2));
2027b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 3));
2037b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 3, 3, 3));
2047b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 3));
2057b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
2067b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com// Even larger corner radius
2077b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 6, 2, 4));
2087b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 6));
2097b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 6));
2107b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.comDEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 6, 1, 3));
2117b0565907272bfe6682b09a36f7a8fef85e0f73dscroggo@google.com
212