1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com#include "gm.h" 9c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 10c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comtypedef SkScalar (*MakePathProc)(SkPath*); 11c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 12c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_frame(SkPath* path) { 133c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkRect r = { SkIntToScalar(10), SkIntToScalar(10), 143c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkIntToScalar(630), SkIntToScalar(470) }; 153c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->addRoundRect(r, SkIntToScalar(15), SkIntToScalar(15)); 16d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 17c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkPaint paint; 18c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com paint.setStyle(SkPaint::kStroke_Style); 193c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com paint.setStrokeWidth(SkIntToScalar(5)); 20c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com paint.getFillPath(*path, path); 213c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com return SkIntToScalar(15); 22c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 23c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 24c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_triangle(SkPath* path) { 25c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com static const int gCoord[] = { 26c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 10, 20, 15, 5, 30, 30 27c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com }; 28c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->moveTo(SkIntToScalar(gCoord[0]), SkIntToScalar(gCoord[1])); 29c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->lineTo(SkIntToScalar(gCoord[2]), SkIntToScalar(gCoord[3])); 30c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->lineTo(SkIntToScalar(gCoord[4]), SkIntToScalar(gCoord[5])); 31c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->close(); 323c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->offset(SkIntToScalar(10), SkIntToScalar(0)); 33c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return SkIntToScalar(30); 34c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 35c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 36c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_rect(SkPath* path) { 373c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkRect r = { SkIntToScalar(10), SkIntToScalar(10), 383c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkIntToScalar(30), SkIntToScalar(30) }; 39c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->addRect(r); 403c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->offset(SkIntToScalar(10), SkIntToScalar(0)); 41c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return SkIntToScalar(30); 42c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 43c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 44c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_oval(SkPath* path) { 453c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkRect r = { SkIntToScalar(10), SkIntToScalar(10), 463c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com SkIntToScalar(30), SkIntToScalar(30) }; 47c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->addOval(r); 483c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->offset(SkIntToScalar(10), SkIntToScalar(0)); 49c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return SkIntToScalar(30); 50c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 51c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 52c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_sawtooth(SkPath* path) { 53c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkScalar x = SkIntToScalar(20); 54c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkScalar y = SkIntToScalar(20); 55c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar x0 = x; 56c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar dx = SK_Scalar1 * 5; 57c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar dy = SK_Scalar1 * 10; 58d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 59c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->moveTo(x, y); 60c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com for (int i = 0; i < 32; i++) { 61c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com x += dx; 62c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->lineTo(x, y - dy); 63c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com x += dx; 64c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->lineTo(x, y + dy); 65c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 663c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->lineTo(x, y + (2 * dy)); 673c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com path->lineTo(x0, y + (2 * dy)); 68c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->close(); 69c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return SkIntToScalar(30); 70c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 71c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 72c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_star(SkPath* path, int n) { 73c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar c = SkIntToScalar(45); 74c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar r = SkIntToScalar(20); 75d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 76c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkScalar rad = -SK_ScalarPI / 2; 77c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com const SkScalar drad = (n >> 1) * SK_ScalarPI * 2 / n; 78d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 79c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->moveTo(c, c - r); 80c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com for (int i = 1; i < n; i++) { 81c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com rad += drad; 82c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkScalar cosV, sinV = SkScalarSinCos(rad, &cosV); 83c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->lineTo(c + SkScalarMul(cosV, r), c + SkScalarMul(sinV, r)); 84c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 85c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com path->close(); 86c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return r * 2 * 6 / 5; 87c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com} 88c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 89c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_star_5(SkPath* path) { return make_star(path, 5); } 90c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic SkScalar make_star_13(SkPath* path) { return make_star(path, 13); } 91c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 92683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org// We don't expect any output from this path. 93683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.orgstatic SkScalar make_line(SkPath* path) { 94683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->moveTo(SkIntToScalar(30), SkIntToScalar(30)); 95683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->lineTo(SkIntToScalar(120), SkIntToScalar(40)); 96683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->close(); 97683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->moveTo(SkIntToScalar(150), SkIntToScalar(30)); 98683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->lineTo(SkIntToScalar(150), SkIntToScalar(30)); 99683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->lineTo(SkIntToScalar(300), SkIntToScalar(40)); 100683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org path->close(); 101683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org return SkIntToScalar(40); 102683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org} 103683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org 104c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comstatic const MakePathProc gProcs[] = { 105c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_frame, 106c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_triangle, 107c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_rect, 108c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_oval, 109c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_sawtooth, 110c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com make_star_5, 111683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org make_star_13, 112683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org make_line, 113c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com}; 114c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 115c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com#define N SK_ARRAY_COUNT(gProcs) 116c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 1175ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comclass PathFillGM : public skiagm::GM { 118c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkPath fPath[N]; 119c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkScalar fDY[N]; 120c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.compublic: 1213c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com PathFillGM() { 122c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com for (size_t i = 0; i < N; i++) { 123c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com fDY[i] = gProcs[i](&fPath[i]); 124c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 125c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 126d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 127c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comprotected: 128a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 129a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 130a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 131a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 132c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com virtual SkString onShortName() { 133c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com return SkString("pathfill"); 134c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 135d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1363c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com virtual SkISize onISize() { 1375ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com return SkISize::Make(640, 480); 138c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 139d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 140c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com virtual void onDraw(SkCanvas* canvas) { 141c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com SkPaint paint; 142c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com paint.setAntiAlias(true); 143d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 144c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com for (size_t i = 0; i < N; i++) { 145c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com canvas->drawPath(fPath[i], paint); 1463c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com canvas->translate(SkIntToScalar(0), fDY[i]); 147c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 148c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com } 149d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1505ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comprivate: 1515ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com typedef skiagm::GM INHERITED; 1525ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com}; 1535ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 1545ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com// test inverse-fill w/ a clip that completely excludes the geometry 1555ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comclass PathInverseFillGM : public skiagm::GM { 1565ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkPath fPath[N]; 1575ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkScalar fDY[N]; 1585ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.compublic: 1595ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com PathInverseFillGM() { 1605ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com for (size_t i = 0; i < N; i++) { 1615ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com fDY[i] = gProcs[i](&fPath[i]); 1625ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 1635ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 164d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1655ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comprotected: 166a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 167a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 168a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 169a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 1705ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com virtual SkString onShortName() { 1715ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com return SkString("pathinvfill"); 1725ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 173d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1745ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com virtual SkISize onISize() { 1755ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com return SkISize::Make(450, 220); 1765ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 177d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1785ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com static void show(SkCanvas* canvas, const SkPath& path, const SkPaint& paint, 1795ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com const SkRect* clip, SkScalar top, const SkScalar bottom) { 1805ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->save(); 1815ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com if (clip) { 1825ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkRect r = *clip; 1835ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com r.fTop = top; 1845ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com r.fBottom = bottom; 1855ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->clipRect(r); 1865ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 1875ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->drawPath(path, paint); 1885ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->restore(); 1895ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 1905ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 1915ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com virtual void onDraw(SkCanvas* canvas) { 1925ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkPath path; 193d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1945ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com path.addCircle(SkIntToScalar(50), SkIntToScalar(50), SkIntToScalar(40)); 1955ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com path.toggleInverseFillType(); 1965ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 1975ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkRect clipR = { 0, 0, SkIntToScalar(100), SkIntToScalar(200) }; 1985ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 1995ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 2005ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 2015ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com for (int doclip = 0; doclip <= 1; ++doclip) { 2025ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com for (int aa = 0; aa <= 1; ++aa) { 2035ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com SkPaint paint; 2045ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com paint.setAntiAlias(SkToBool(aa)); 2055ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 2065ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->save(); 2075ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->clipRect(clipR); 208d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2095ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com const SkRect* clipPtr = doclip ? &clipR : NULL; 210c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 2115ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com show(canvas, path, paint, clipPtr, clipR.fTop, clipR.centerY()); 2125ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com show(canvas, path, paint, clipPtr, clipR.centerY(), clipR.fBottom); 213d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2145ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->restore(); 2155ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com canvas->translate(SkIntToScalar(110), 0); 2165ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 2175ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 2185ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com } 219d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 220c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.comprivate: 2215ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com typedef skiagm::GM INHERITED; 222c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com}; 223c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 224c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com/////////////////////////////////////////////////////////////////////////////// 225c280700ad8159fa5bebb26d7c4e87e7fd25a7f26reed@google.com 2265ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comstatic skiagm::GM* MyFactory(void*) { return new PathFillGM; } 2275ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comstatic skiagm::GMRegistry reg(MyFactory); 2285ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.com 2295ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comstatic skiagm::GM* F1(void*) { return new PathInverseFillGM; } 2305ee6491b7a1e7c177abc0186c2749ebe1f71fcf7reed@google.comstatic skiagm::GMRegistry gR1(F1); 231