2 * Copyright 2013 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
12 class CircularClipsGM : public skiagm::GM {
13 SkScalar fX1, fX2, fY, fR;
14 SkPath fCircle1, fCircle2;
17 void onOnceBeforeDraw() override {
23 fCircle1.addCircle(fX1, fY, fR, SkPath::kCW_Direction);
24 fCircle2.addCircle(fX2, fY, fR, SkPath::kCW_Direction);
28 bool runAsBench() const override { return true; }
30 SkString onShortName() override {
31 return SkString("circular-clips");
34 SkISize onISize() override {
35 return SkISize::Make(800, 600);
38 void onDraw(SkCanvas* canvas) override {
39 const SkClipOp ops[] = {
44 kReverseDifference_SkClipOp,
48 SkRect rect = SkRect::MakeLTRB(fX1 - fR, fY - fR, fX2 + fR, fY + fR);
52 // Giant background circular clips (AA, non-inverted, replace/isect)
53 fillPaint.setColor(0x80808080);
55 canvas->scale(10, 10);
56 canvas->translate(-((fX1 + fX2)/2 - fR), -(fY - 2*fR/3));
57 canvas->clipPath(fCircle1, true);
58 canvas->clipPath(fCircle2, true);
60 canvas->drawRect(rect, fillPaint);
64 fillPaint.setColor(0xFF000000);
66 for (size_t i = 0; i < 4; i++) {
67 fCircle1.toggleInverseFillType();
69 fCircle2.toggleInverseFillType();
73 for (size_t op = 0; op < SK_ARRAY_COUNT(ops); op++) {
76 canvas->clipPath(fCircle1);
77 canvas->clipPath(fCircle2, ops[op]);
79 canvas->drawRect(rect, fillPaint);
82 canvas->translate(0, 2 * fY);
85 canvas->translate(fX1 + fX2, 0);
90 typedef skiagm::GM INHERITED;
93 //////////////////////////////////////////////////////////////////////////////
95 DEF_GM( return new CircularClipsGM; )