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" 9707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 10fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org#include "GrTest.h" 11707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#include "effects/GrRRectEffect.h" 12707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 13fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org#include "SkDevice.h" 144e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com#include "SkRRect.h" 154e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 164e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comnamespace skiagm { 174e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 184e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 194e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 204e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comclass RRectGM : public GM { 214e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.compublic: 22fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org enum Type { 23fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kBW_Draw_Type, 24fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kAA_Draw_Type, 25fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kBW_Clip_Type, 26fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kAA_Clip_Type, 27fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org kEffect_Type, 28fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org }; 29fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org RRectGM(Type type) : fType(type) { 304e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com this->setBGColor(0xFFDDDDDD); 314e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com this->setUpRRects(); 324e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 334e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 344e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comprotected: 35fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkString onShortName() SK_OVERRIDE { 364e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com SkString name("rrect"); 37fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org switch (fType) { 38fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kBW_Draw_Type: 39fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_draw_bw"); 40fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 41fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kAA_Draw_Type: 42fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_draw_aa"); 43fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 44fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kBW_Clip_Type: 45fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_clip_bw"); 46fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 47fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kAA_Clip_Type: 48fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_clip_aa"); 49fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 50fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org case kEffect_Type: 51fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org name.append("_effect"); 52fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org break; 534e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 544e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com return name; 554e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 564e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 57f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(kImageWidth, kImageHeight); } 584e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 59fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 60fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kEffect_Type == fType) { 61a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kGPUOnly_Flag | kSkipTiled_Flag; 62fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } else { 63a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 64fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 65fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 664e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 67fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 68707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 699c135db83d198e7d8200027c7d2cf60f38517ee3reed@google.com GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); 709c135db83d198e7d8200027c7d2cf60f38517ee3reed@google.com GrContext* context = rt ? rt->getContext() : NULL; 71fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kEffect_Type == fType && NULL == context) { 72fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org return; 73fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 74707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 754e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 76fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkPaint paint; 77fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kAA_Draw_Type == fType) { 78fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org paint.setAntiAlias(true); 79fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 80f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 81bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org static const SkRect kMaxTileBound = SkRect::MakeWH(SkIntToScalar(kTileX), 82bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkIntToScalar(kTileY)); 83bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#ifdef SK_DEBUG 84bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org static const SkRect kMaxImageBound = SkRect::MakeWH(SkIntToScalar(kImageWidth), 85bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkIntToScalar(kImageHeight)); 86bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#endif 874e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 88b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#if SK_SUPPORT_GPU 89b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int lastEdgeType = (kEffect_Type == fType) ? kLast_GrProcessorEdgeType: 0; 90b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#else 91b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com int lastEdgeType = 0; 92b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com#endif 93bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org 94bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org int y = 1; 95b0ba39d1ca80e95f749f06214d144b39d1b921bdbsalomon@google.com for (int et = 0; et <= lastEdgeType; ++et) { 96bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org int x = 1; 97bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org for (int curRRect = 0; curRRect < kNumRRects; ++curRRect) { 98bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org bool drew = true; 99bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#ifdef SK_DEBUG 100bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkASSERT(kMaxTileBound.contains(fRRects[curRRect].getBounds())); 101bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkRect imageSpaceBounds = fRRects[curRRect].getBounds(); 102bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org imageSpaceBounds.offset(SkIntToScalar(x), SkIntToScalar(y)); 103bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkASSERT(kMaxImageBound.contains(imageSpaceBounds)); 104bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org#endif 1054e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->save(); 1064e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 107fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (kEffect_Type == fType) { 108707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 109fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org GrTestTarget tt; 110fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org context->getTestTarget(&tt); 111fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org if (NULL == tt.target()) { 112fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkDEBUGFAIL("Couldn't get Gr test target."); 113fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org return; 114fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 115fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org GrDrawState* drawState = tt.target()->drawState(); 116f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 117bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org SkRRect rrect = fRRects[curRRect]; 118fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org rrect.offset(SkIntToScalar(x), SkIntToScalar(y)); 119b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; 120b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkAutoTUnref<GrFragmentProcessor> fp(GrRRectEffect::Create(edgeType, 121b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt rrect)); 122b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt if (fp) { 123b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt drawState->addCoverageProcessor(fp); 124fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org drawState->setIdentityViewMatrix(); 125fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org drawState->setRenderTarget(rt); 126fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org drawState->setColor(0xff000000); 127fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org 128fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org SkRect bounds = rrect.getBounds(); 129fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org bounds.outset(2.f, 2.f); 130f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 131fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org tt.target()->drawSimpleRect(bounds); 132bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } else { 133bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org drew = false; 134fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } 135707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 136fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org } else if (kBW_Clip_Type == fType || kAA_Clip_Type == fType) { 137fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org bool aaClip = (kAA_Clip_Type == fType); 138bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org canvas->clipRRect(fRRects[curRRect], SkRegion::kReplace_Op, aaClip); 1394e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->drawRect(kMaxTileBound, paint); 1404e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } else { 141bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org canvas->drawRRect(fRRects[curRRect], paint); 1424e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1434e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com canvas->restore(); 144bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (drew) { 145bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org x = x + kTileX; 146bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (x > kImageWidth) { 147bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org x = 1; 148bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org y += kTileY; 149bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 150bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 151bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org } 152bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org if (x != 1) { 153bfce48e0bca2c92eca55f31511a3d6def1b5309fcommit-bot@chromium.org y += kTileY; 1544e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1554e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1564e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1574e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1584e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com void setUpRRects() { 1597a03d86a3d9adcb13432fbd82039725149487c97skia.committer@gmail.com // each RRect must fit in a 0x0 -> (kTileX-2)x(kTileY-2) block. These will be tiled across 1604e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // the screen in kTileX x kTileY tiles. The extra empty pixels on each side are for AA. 1614e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1624e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // simple cases 1634e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[0].setRect(SkRect::MakeWH(kTileX-2, kTileY-2)); 1644e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[1].setOval(SkRect::MakeWH(kTileX-2, kTileY-2)); 1654e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[2].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 10, 10); 166c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[3].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 10, 5); 167c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org // small circular corners are an interesting test case for gpu clipping 168c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[4].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 1, 1); 169c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[5].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 0.5f, 0.5f); 170c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org fRRects[6].setRectXY(SkRect::MakeWH(kTileX-2, kTileY-2), 0.2f, 0.2f); 1714e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1724e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // The first complex case needs special handling since it is a square 1734e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[kNumSimpleCases].setRectRadii(SkRect::MakeWH(kTileY-2, kTileY-2), gRadii[0]); 174f6100c8b1aba89027cf74da8a324a744fd1d53famike@reedtribe.org for (size_t i = 1; i < SK_ARRAY_COUNT(gRadii); ++i) { 1754e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com fRRects[kNumSimpleCases+i].setRectRadii(SkRect::MakeWH(kTileX-2, kTileY-2), gRadii[i]); 1764e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1774e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com } 1784e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1794e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comprivate: 180fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.org Type fType; 181f1f66c0c8623805fdb88f09c0d87cbdd1745e12bskia.committer@gmail.com 1824e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com static const int kImageWidth = 640; 1834e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com static const int kImageHeight = 480; 1844e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1854e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com static const int kTileX = 80; 1864e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com static const int kTileY = 40; 1874e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 188c2f7824436d05da6e8514d06a54773538aace028commit-bot@chromium.org static const int kNumSimpleCases = 7; 18904eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org static const int kNumComplexCases = 35; 1905683d42d3aa9c0b2a680a1c4766205a06565f196robertphillips@google.com static const SkVector gRadii[kNumComplexCases][4]; 1914e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1924e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com static const int kNumRRects = kNumSimpleCases + kNumComplexCases; 1934e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com SkRRect fRRects[kNumRRects]; 1944e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1954e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com typedef GM INHERITED; 1964e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com}; 1974e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 1984e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com// Radii for the various test cases. Order is UL, UR, LR, LL 1994e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.comconst SkVector RRectGM::gRadii[kNumComplexCases][4] = { 2004e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // a circle 2014e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { kTileY, kTileY }, { kTileY, kTileY }, { kTileY, kTileY }, { kTileY, kTileY } }, 2024e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2034e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // odd ball cases 2044e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 8, 8 }, { 32, 32 }, { 8, 8 }, { 32, 32 } }, 2054e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 16, 8 }, { 8, 16 }, { 16, 8 }, { 8, 16 } }, 2064e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 16, 16 }, { 8, 8 }, { 32, 32 } }, 2074e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2084e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // UL 2094e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 30, 30 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2104e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 30, 15 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2114e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 15, 30 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 2124e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2134e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // UR 2144e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 30, 30 }, { 0, 0 }, { 0, 0 } }, 2154e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 30, 15 }, { 0, 0 }, { 0, 0 } }, 2164e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 15, 30 }, { 0, 0 }, { 0, 0 } }, 2174e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2184e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // LR 2194e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 30, 30 }, { 0, 0 } }, 2204e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 30, 15 }, { 0, 0 } }, 2214e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 15, 30 }, { 0, 0 } }, 2224e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2234e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // LL 2244e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 30, 30 } }, 2254e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 30, 15 } }, 2264e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 15, 30 } }, 2274e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2284e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com // over-sized radii 2294e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 100, 400 }, { 0, 0 }, { 0, 0 } }, 2304e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 0, 0 }, { 400, 400 }, { 0, 0 }, { 0, 0 } }, 2314e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com { { 400, 400 }, { 400, 400 }, { 400, 400 }, { 400, 400 } }, 232cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org 233cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org // circular corner tabs 234cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 0, 0 }, { 20, 20 }, { 20, 20 }, { 0, 0 } }, 235cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 20, 20 }, { 20, 20 }, { 0, 0 }, { 0, 0 } }, 236cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 20, 20 } }, 237cb3672ed7fb9a5d54849e3265e8399bc5224bacecommit-bot@chromium.org { { 20, 20 }, { 0, 0 }, { 0, 0 }, { 20, 20 } }, 238c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org 23904eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org // small radius circular corner tabs 24004eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0, 0 }, { 0.2f, 0.2f }, { 0.2f, 0.2f }, { 0, 0 } }, 24104eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.3f, 0.3f }, { 0.3f, .3f }, { 0, 0 }, { 0, 0 } }, 24204eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 243c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org // single circular corner cases 244c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 15, 15 } }, 245c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 0, 0 }, { 15, 15 }, { 0, 0 } }, 246c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 0, 0 }, { 15, 15 }, { 0, 0 }, { 0, 0 } }, 247c5c748c14797ae49ba73999a63e3b07315c888e1commit-bot@chromium.org { { 15, 15 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, 248fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org 249fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org // nine patch elliptical 250fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org { { 5, 7 }, { 8, 7 }, { 8, 12 }, { 5, 12 } }, 251fa5edbe5750632b4590ed951c594dd2766ccc4cfcommit-bot@chromium.org { { 0, 7 }, { 8, 7 }, { 8, 12 }, { 0, 12 } }, 25204eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 25304eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org // nine patch elliptical, small radii 25404eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.4f, 7 }, { 8, 7 }, { 8, 12 }, { 0.4f, 12 } }, 25504eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.4f, 0.4f }, { 8, 0.4f }, { 8, 12 }, { 0.4f, 12 } }, 25604eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 20, 0.4f }, { 18, 0.4f }, { 18, 0.4f }, { 20, 0.4f } }, 25704eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org { { 0.3f, 0.4f }, { 0.3f, 0.4f }, { 0.3f, 0.4f }, { 0.3f, 0.4f } }, 25804eff72bf0d80392148ce7bb4967a9647ed5475ccommit-bot@chromium.org 2594e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com}; 2604e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2614e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 2624e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 263fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kAA_Draw_Type); ) 264fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kBW_Draw_Type); ) 265fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kAA_Clip_Type); ) 266fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kBW_Clip_Type); ) 267707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#if SK_SUPPORT_GPU 268fbde87f53d659ae2bd616751e466c887b0f3bee5commit-bot@chromium.orgDEF_GM( return new RRectGM(RRectGM::kEffect_Type); ) 269707bd60203ba6d89aaa3061efdba09cefd5b5575bsalomon@google.com#endif 2704e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com 2714e18c7a9bbef6ac949d535aa61dfe1462ebb4452robertphillips@google.com} 272