1d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org/* 2d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org * Copyright 2013 Google Inc. 3d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org * 4d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org * found in the LICENSE file. 6d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org */ 7d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 8d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org#include "gm.h" 9d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org#include "SkCanvas.h" 10d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org#include "SkPath.h" 11d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 12bbf3e8982d9e6846196f73068bb83db849654f12reedclass CircularClipsGM : public skiagm::GM { 13bbf3e8982d9e6846196f73068bb83db849654f12reed SkScalar fX1, fX2, fY, fR; 14bbf3e8982d9e6846196f73068bb83db849654f12reed SkPath fCircle1, fCircle2; 15d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 16d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.orgpublic: 17bbf3e8982d9e6846196f73068bb83db849654f12reed CircularClipsGM() { 18bbf3e8982d9e6846196f73068bb83db849654f12reed fX1 = 80; 19bbf3e8982d9e6846196f73068bb83db849654f12reed fX2 = 120; 20bbf3e8982d9e6846196f73068bb83db849654f12reed fY = 50; 21bbf3e8982d9e6846196f73068bb83db849654f12reed fR = 40; 22bbf3e8982d9e6846196f73068bb83db849654f12reed 23bbf3e8982d9e6846196f73068bb83db849654f12reed fCircle1.addCircle(fX1, fY, fR, SkPath::kCW_Direction); 24bbf3e8982d9e6846196f73068bb83db849654f12reed fCircle2.addCircle(fX2, fY, fR, SkPath::kCW_Direction); 25bbf3e8982d9e6846196f73068bb83db849654f12reed } 26d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 27d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.orgprotected: 28a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 29bbf3e8982d9e6846196f73068bb83db849654f12reed return kSkipTiled_Flag | kAsBench_Flag; 30a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 31a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 32d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org virtual SkString onShortName() { 33d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org return SkString("circular-clips"); 34d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 35d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 36d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org virtual SkISize onISize() { 37d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org return SkISize::Make(800, 600); 38d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 39d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 40d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org virtual void onDraw(SkCanvas* canvas) { 41d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::Op ops[] = { 42d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kDifference_Op, 43d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kIntersect_Op, 44d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kUnion_Op, 45d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kXOR_Op, 46d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kReverseDifference_Op, 47d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkRegion::kReplace_Op, 48d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org }; 49d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 50bbf3e8982d9e6846196f73068bb83db849654f12reed SkRect rect = SkRect::MakeLTRB(fX1 - fR, fY - fR, fX2 + fR, fY + fR); 51d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 52d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org SkPaint fillPaint; 53d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 54d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org for (size_t i = 0; i < 4; i++) { 55bbf3e8982d9e6846196f73068bb83db849654f12reed fCircle1.toggleInverseFillType(); 56d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org if (i % 2 == 0) { 57bbf3e8982d9e6846196f73068bb83db849654f12reed fCircle2.toggleInverseFillType(); 58d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 59d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 60d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org canvas->save(); 61d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org for (size_t op = 0; op < SK_ARRAY_COUNT(ops); op++) { 62d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org canvas->save(); 63d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 64bbf3e8982d9e6846196f73068bb83db849654f12reed canvas->clipPath(fCircle1, SkRegion::kReplace_Op); 65bbf3e8982d9e6846196f73068bb83db849654f12reed canvas->clipPath(fCircle2, ops[op]); 66d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 67d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org canvas->drawRect(rect, fillPaint); 68d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 69d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org canvas->restore(); 70bbf3e8982d9e6846196f73068bb83db849654f12reed canvas->translate(0, 2 * fY); 71d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 72d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org canvas->restore(); 73bbf3e8982d9e6846196f73068bb83db849654f12reed canvas->translate(fX1 + fX2, 0); 74d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 75d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org } 76d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 77d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.orgprivate: 78bbf3e8982d9e6846196f73068bb83db849654f12reed typedef skiagm::GM INHERITED; 79d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org}; 80d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 81d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org////////////////////////////////////////////////////////////////////////////// 82d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.org 83d2623a1a0bcd23801c86a7d3f352b5e1f1c2e195commit-bot@chromium.orgDEF_GM( return new CircularClipsGM; ) 84