14e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com/* 24e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com * Copyright 2012 Google Inc. 34e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com * 44e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com * Use of this source code is governed by a BSD-style license that can be 54e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com * found in the LICENSE file. 64e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com */ 74e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 84e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 10707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 1104194f32f4f5ec9029357a18c0f1f9dc3404fc0cjoshualitt#include "GrContext.h" 121105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman#include "GrRenderTargetContextPriv.h" 13707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#include "effects/GrRRectEffect.h" 14895274391db8df7357334aec260edca2e1735626Brian Salomon#include "ops/GrDrawOp.h" 15895274391db8df7357334aec260edca2e1735626Brian Salomon#include "ops/GrRectOpFactory.h" 16707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 174e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com#include "SkRRect.h" 184e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 194e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comnamespace skiagm { 204e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 214e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 224e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 234e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comclass RRectGM : public GM { 244e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.compublic: 25fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org enum Type { 26fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kBW_Draw_Type, 27fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kAA_Draw_Type, 28fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kBW_Clip_Type, 29fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kAA_Clip_Type, 30fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kEffect_Type, 31fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org }; 32b10fe4941b08172378d3d1928959122f106ced37herb RRectGM(Type type) : fType(type) { } 33b10fe4941b08172378d3d1928959122f106ced37herb 34b10fe4941b08172378d3d1928959122f106ced37herbprotected: 35b10fe4941b08172378d3d1928959122f106ced37herb 36b10fe4941b08172378d3d1928959122f106ced37herb void onOnceBeforeDraw() override { 3765cdba6ba78aaec0c0a4596bb5941020c789482bcaryclark this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD)); 384e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com this->setUpRRects(); 394e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 404e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 4136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 424e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com SkString name("rrect"); 43fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org switch (fType) { 44fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kBW_Draw_Type: 45fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_draw_bw"); 46fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 47fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kAA_Draw_Type: 48fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_draw_aa"); 49fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 50fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kBW_Clip_Type: 51fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_clip_bw"); 52fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 53fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kAA_Clip_Type: 54fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_clip_aa"); 55fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 56fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kEffect_Type: 57fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_effect"); 58fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 594e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 604e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com return name; 614e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 624e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 6336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { return SkISize::Make(kImageWidth, kImageHeight); } 644e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 6536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 661105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman GrRenderTargetContext* renderTargetContext = 671105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman canvas->internal_private_accessTopLayerRenderTargetContext(); 681105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman if (kEffect_Type == fType && !renderTargetContext) { 692a24338c777462e04a2b26295f9c034155ee8f3ehalcanary skiagm::GM::DrawGpuOnlyMessage(canvas); 70fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org return; 71fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 724e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 73fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkPaint paint; 74fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kAA_Draw_Type == fType) { 75fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org paint.setAntiAlias(true); 76fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 77f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 78dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein const SkRect kMaxTileBound = SkRect::MakeWH(SkIntToScalar(kTileX), 79dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein SkIntToScalar(kTileY)); 80bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#ifdef SK_DEBUG 81dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein const SkRect kMaxImageBound = SkRect::MakeWH(SkIntToScalar(kImageWidth), 82dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein SkIntToScalar(kImageHeight)); 83bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#endif 844e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 85b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#if SK_SUPPORT_GPU 86b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int lastEdgeType = (kEffect_Type == fType) ? kLast_GrProcessorEdgeType: 0; 87b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#else 88b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com int lastEdgeType = 0; 89b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#endif 90bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org 91bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org int y = 1; 92b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com for (int et = 0; et <= lastEdgeType; ++et) { 93bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org int x = 1; 94bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org for (int curRRect = 0; curRRect < kNumRRects; ++curRRect) { 95bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org bool drew = true; 96bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#ifdef SK_DEBUG 97bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkASSERT(kMaxTileBound.contains(fRRects[curRRect].getBounds())); 98bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkRect imageSpaceBounds = fRRects[curRRect].getBounds(); 99bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org imageSpaceBounds.offset(SkIntToScalar(x), SkIntToScalar(y)); 100bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkASSERT(kMaxImageBound.contains(imageSpaceBounds)); 101bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#endif 1024e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->save(); 1034e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 104fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kEffect_Type == fType) { 105707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 106bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkRRect rrect = fRRects[curRRect]; 107fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org rrect.offset(SkIntToScalar(x), SkIntToScalar(y)); 108b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; 10906ca8ec87cf6fab57cadd043a5ac18c4154a4129bungeman sk_sp<GrFragmentProcessor> fp(GrRRectEffect::Make(edgeType, rrect)); 110b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt if (fp) { 11182f44319159bb98dcacdbbec7ea643dde5ed024bBrian Salomon GrPaint grPaint; 11282f44319159bb98dcacdbbec7ea643dde5ed024bBrian Salomon grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); 11328a838e532250fcca9673aca6c4616193a5a139drobertphillips grPaint.addCoverageFragmentProcessor(std::move(fp)); 114fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org 115fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkRect bounds = rrect.getBounds(); 116fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org bounds.outset(2.f, 2.f); 117f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 118649a3411f99a8aea3c46e4ef1f495f61b9801164Brian Salomon std::unique_ptr<GrMeshDrawOp> op(GrRectOpFactory::MakeNonAAFill( 1196a639040bc3ee5369d86c9cb5b9047208beb5206Brian Salomon 0xff000000, SkMatrix::I(), bounds, nullptr, nullptr)); 120649a3411f99a8aea3c46e4ef1f495f61b9801164Brian Salomon renderTargetContext->priv().testingOnly_addMeshDrawOp( 12182f44319159bb98dcacdbbec7ea643dde5ed024bBrian Salomon std::move(grPaint), GrAAType::kNone, std::move(op)); 122bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } else { 123bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org drew = false; 124fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 125707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 126fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } else if (kBW_Clip_Type == fType || kAA_Clip_Type == fType) { 127fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org bool aaClip = (kAA_Clip_Type == fType); 128669983856d99b9312be3166b7dd1f8483a90c315reed canvas->clipRRect(fRRects[curRRect], aaClip); 1294e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->drawRect(kMaxTileBound, paint); 1304e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } else { 131bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org canvas->drawRRect(fRRects[curRRect], paint); 1324e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1334e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->restore(); 134bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (drew) { 135bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org x = x + kTileX; 136bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (x > kImageWidth) { 137bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org x = 1; 138bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org y += kTileY; 139bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 140bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 141bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 142bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (x != 1) { 143bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org y += kTileY; 1444e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1454e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1464e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1474e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1484e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com void setUpRRects() { 1497a03d86a3d9adcb13432fbd82039725149487c97skia.committer@gmail.com // each RRect must fit in a 0x0 -> (kTileX-2)x(kTileY-2) block. These will be tiled across 1504e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // the screen in kTileX x kTileY tiles. The extra empty pixels on each side are for AA. 1514e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1524e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // simple cases 1534e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[0].setRect(SkRect::MakeWH(kTileX-2, kTileY-2)); 1544e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[1].setOval(SkRect::MakeWH(kTileX-2, kTileY-2)); 1554e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[2].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 10, 10); 156c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[3].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 10, 5); 157c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org // small circular corners are an interesting test case for gpu clipping 158c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[4].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 1, 1); 159c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[5].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 0.5f, 0.5f); 160c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[6].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 0.2f, 0.2f); 1614e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1624e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // The first complex case needs special handling since it is a square 1634e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[kNumSimpleCases].setRectRadii(SkRect::MakeWH(kTileY-2, kTileY-2), gRadii[0]); 164f6100c8b1aba89027cf74da8a324a744fd1d53famike@reedtribe.org for (size_t i = 1; i < SK_ARRAY_COUNT(gRadii); ++i) { 1654e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[kNumSimpleCases+i].setRectRadii(SkRect::MakeWH(kTileX-2, kTileY-2), gRadii[i]); 1664e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1674e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1684e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1694e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comprivate: 170fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org Type fType; 171f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 172dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kImageWidth = 640; 173dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kImageHeight = 480; 1744e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 175dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kTileX = 80; 176dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kTileY = 40; 1774e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 178dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kNumSimpleCases = 7; 179dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kNumComplexCases = 35; 1805683d42d3aa9c0b2a680a1c4766205a06565f196robertphillips@google.com static const SkVector gRadii[kNumComplexCases][4]; 1814e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 182dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein static constexpr int kNumRRects = kNumSimpleCases + kNumComplexCases; 1834e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com SkRRect fRRects[kNumRRects]; 1844e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1854e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com typedef GM INHERITED; 1864e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com}; 1874e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1884e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com// Radii for the various test cases. Order is UL, UR, LR, LL 1894e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comconst SkVector RRectGM::gRadii[kNumComplexCases][4] = { 1904e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // a circle 1914e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { kTileY, kTileY }, { kTileY, kTileY }, { kTileY, kTileY }, { kTileY, kTileY } }, 1924e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1934e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // odd ball cases 1944e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 8, 8 }, { 32, 32 }, { 8, 8 }, { 32, 32 } }, 1954e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 16, 8 }, { 8, 16 }, { 16, 8 }, { 8, 16 } }, 1964e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 16, 16 }, { 8, 8 }, { 32, 32 } }, 1974e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1984e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // UL 1994e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 30, 30 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2004e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 30, 15 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2014e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 15, 30 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2024e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2034e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // UR 2044e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 30, 30 }, { 0, 0 }, { 0, 0 } }, 2054e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 30, 15 }, { 0, 0 }, { 0, 0 } }, 2064e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 15, 30 }, { 0, 0 }, { 0, 0 } }, 2074e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2084e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // LR 2094e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 30, 30 }, { 0, 0 } }, 2104e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 30, 15 }, { 0, 0 } }, 2114e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 15, 30 }, { 0, 0 } }, 2124e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2134e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // LL 2144e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 30, 30 } }, 2154e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 30, 15 } }, 2164e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 15, 30 } }, 2174e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2184e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // over-sized radii 2194e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 100, 400 }, { 0, 0 }, { 0, 0 } }, 2204e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 400, 400 }, { 0, 0 }, { 0, 0 } }, 2214e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 400, 400 }, { 400, 400 }, { 400, 400 }, { 400, 400 } }, 222cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org 223cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org // circular corner tabs 224cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 0, 0 }, { 20, 20 }, { 20, 20 }, { 0, 0 } }, 225cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 20, 20 }, { 20, 20 }, { 0, 0 }, { 0, 0 } }, 226cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 20, 20 } }, 227cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 20, 20 }, { 0, 0 }, { 0, 0 }, { 20, 20 } }, 228c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org 22904eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org // small radius circular corner tabs 23004eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0, 0 }, { 0.2f, 0.2f }, { 0.2f, 0.2f }, { 0, 0 } }, 23104eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.3f, 0.3f }, { 0.3f, .3f }, { 0, 0 }, { 0, 0 } }, 23204eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 233c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org // single circular corner cases 234c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 15, 15 } }, 235c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 15, 15 }, { 0, 0 } }, 236c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 15, 15 }, { 0, 0 }, { 0, 0 } }, 237c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 15, 15 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 238fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org 239fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org // nine patch elliptical 240fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org { { 5, 7 }, { 8, 7 }, { 8, 12 }, { 5, 12 } }, 241fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org { { 0, 7 }, { 8, 7 }, { 8, 12 }, { 0, 12 } }, 24204eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 24304eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org // nine patch elliptical, small radii 24404eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.4f, 7 }, { 8, 7 }, { 8, 12 }, { 0.4f, 12 } }, 24504eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.4f, 0.4f }, { 8, 0.4f }, { 8, 12 }, { 0.4f, 12 } }, 24604eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 20, 0.4f }, { 18, 0.4f }, { 18, 0.4f }, { 20, 0.4f } }, 24704eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.3f, 0.4f }, { 0.3f, 0.4f }, { 0.3f, 0.4f }, { 0.3f, 0.4f } }, 24804eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 2494e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com}; 2504e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2514e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 2524e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 253fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kAA_Draw_Type); ) 254fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kBW_Draw_Type); ) 255fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kAA_Clip_Type); ) 256fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kBW_Clip_Type); ) 257707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 258fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kEffect_Type); ) 259707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 2604e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2614e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com} 262