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