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 "SkDevice.h"
13#include "SkPath.h"
14#include "SkPathOps.h"
15#include "SkPicture.h"
16#include "SkPictureRecorder.h"
17#include "SkRect.h"
18
19namespace skiagm {
20
21class PathOpsSkpClipGM : public GM {
22public:
23    PathOpsSkpClipGM() {
24    }
25
26protected:
27    virtual SkString onShortName() SK_OVERRIDE {
28        return SkString("pathopsskpclip");
29    }
30
31    virtual SkISize onISize() SK_OVERRIDE {
32        return SkISize::Make(1200, 900);
33    }
34
35    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
36        SkPictureRecorder recorder;
37        SkCanvas* rec = recorder.beginRecording(1200, 900, NULL, 0);
38        SkPath p;
39        SkRect r = {
40            SkIntToScalar(100),
41            SkIntToScalar(200),
42            SkIntToScalar(400),
43            SkIntToScalar(700)
44        };
45        p.addRoundRect(r, SkIntToScalar(50), SkIntToScalar(50));
46        rec->clipPath(p, SkRegion::kIntersect_Op, true);
47        rec->translate(SkIntToScalar(250), SkIntToScalar(250));
48        rec->clipPath(p, SkRegion::kIntersect_Op, true);
49        rec->drawColor(0xffff0000);
50        SkAutoTUnref<SkPicture> pict(recorder.endRecording());
51
52        canvas->setAllowSimplifyClip(true);
53        canvas->save();
54        canvas->drawPicture(pict);
55        canvas->restore();
56
57        canvas->setAllowSimplifyClip(false);
58        canvas->save();
59        canvas->translate(SkIntToScalar(1200 / 2), 0);
60        canvas->drawPicture(pict);
61        canvas->restore();
62    }
63
64private:
65    typedef GM INHERITED;
66};
67
68//////////////////////////////////////////////////////////////////////////////
69
70static GM* MyFactory(void*) { return new PathOpsSkpClipGM; }
71static GMRegistry reg(MyFactory);
72
73}
74