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
19 namespace skiagm {
20
21 class PathOpsSkpClipGM : public GM {
22 public:
PathOpsSkpClipGM()23 PathOpsSkpClipGM() {
24 }
25
26 protected:
onShortName()27 SkString onShortName() override {
28 return SkString("pathopsskpclip");
29 }
30
onISize()31 SkISize onISize() override {
32 return SkISize::Make(1200, 900);
33 }
34
onDraw(SkCanvas * canvas)35 void onDraw(SkCanvas* canvas) override {
36 SkPictureRecorder recorder;
37 SkCanvas* rec = recorder.beginRecording(1200, 900, nullptr, 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
64 private:
65 typedef GM INHERITED;
66 };
67
68 //////////////////////////////////////////////////////////////////////////////
69
MyFactory(void *)70 static GM* MyFactory(void*) { return new PathOpsSkpClipGM; }
71 static GMRegistry reg(MyFactory);
72
73 }
74