1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm.h"
9#include "SkBitmap.h"
10#include "SkCanvas.h"
11#include "SkClipStack.h"
12#include "SkPath.h"
13#include "SkPathOps.h"
14#include "SkPicture.h"
15#include "SkPictureRecorder.h"
16#include "SkRect.h"
17
18namespace skiagm {
19
20class PathOpsSkpClipGM : public GM {
21public:
22    PathOpsSkpClipGM() {
23    }
24
25protected:
26    SkString onShortName() override {
27        return SkString("pathopsskpclip");
28    }
29
30    SkISize onISize() override {
31        return SkISize::Make(1200, 900);
32    }
33
34    void onDraw(SkCanvas* canvas) override {
35        SkPictureRecorder recorder;
36        SkCanvas* rec = recorder.beginRecording(1200, 900, nullptr, 0);
37        SkPath p;
38        SkRect r = {
39            SkIntToScalar(100),
40            SkIntToScalar(200),
41            SkIntToScalar(400),
42            SkIntToScalar(700)
43        };
44        p.addRoundRect(r, SkIntToScalar(50), SkIntToScalar(50));
45        rec->clipPath(p, true);
46        rec->translate(SkIntToScalar(250), SkIntToScalar(250));
47        rec->clipPath(p, true);
48        rec->drawColor(0xffff0000);
49        sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture());
50
51        canvas->setAllowSimplifyClip(true);
52        canvas->save();
53        canvas->drawPicture(pict);
54        canvas->restore();
55
56        canvas->setAllowSimplifyClip(false);
57        canvas->save();
58        canvas->translate(SkIntToScalar(1200 / 2), 0);
59        canvas->drawPicture(pict);
60        canvas->restore();
61    }
62
63private:
64    typedef GM INHERITED;
65};
66
67//////////////////////////////////////////////////////////////////////////////
68
69static GM* MyFactory(void*) { return new PathOpsSkpClipGM; }
70static GMRegistry reg(MyFactory);
71
72}
73