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;
23 fCircle1.addCircle(fX1, fY, fR, SkPath::kCW_Direction);
24 fCircle2.addCircle(fX2, fY, fR, SkPath::kCW_Direction);
28 virtual uint32_t onGetFlags() const SK_OVERRIDE {
29 return kSkipTiled_Flag | kAsBench_Flag;
32 virtual SkString onShortName() {
33 return SkString("circular-clips");
36 virtual SkISize onISize() {
37 return SkISize::Make(800, 600);
40 virtual void onDraw(SkCanvas* canvas) {
41 SkRegion::Op ops[] = {
42 SkRegion::kDifference_Op,
43 SkRegion::kIntersect_Op,
46 SkRegion::kReverseDifference_Op,
47 SkRegion::kReplace_Op,
50 SkRect rect = SkRect::MakeLTRB(fX1 - fR, fY - fR, fX2 + fR, fY + fR);
54 for (size_t i = 0; i < 4; i++) {
55 fCircle1.toggleInverseFillType();
57 fCircle2.toggleInverseFillType();
61 for (size_t op = 0; op < SK_ARRAY_COUNT(ops); op++) {
64 canvas->clipPath(fCircle1, SkRegion::kReplace_Op);
65 canvas->clipPath(fCircle2, ops[op]);
67 canvas->drawRect(rect, fillPaint);
70 canvas->translate(0, 2 * fY);
73 canvas->translate(fX1 + fX2, 0);
78 typedef skiagm::GM INHERITED;
81 //////////////////////////////////////////////////////////////////////////////
83 DEF_GM( return new CircularClipsGM; )