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