1 /*
2  * Copyright 2011 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 "SkCanvas.h"
10 #include "SkPath.h"
11 
12 class ClipStrokeRectGM : public skiagm::GM {
13 public:
ClipStrokeRectGM()14     ClipStrokeRectGM() {
15 
16     }
17 
18 protected:
onShortName()19     SkString onShortName() override {
20         return SkString("clip_strokerect");
21     }
22 
onISize()23     SkISize onISize() override {
24         return SkISize::Make(200, 400);
25     }
26 
onDraw(SkCanvas * canvas)27     void onDraw(SkCanvas* canvas) override {
28         SkPaint p;
29         p.setColor(SK_ColorRED);
30         p.setAntiAlias(true);
31         p.setStyle(SkPaint::kStroke_Style);
32         p.setStrokeWidth(22);
33 
34         SkRect r = SkRect::MakeXYWH(20, 20, 100, 100);
35         // setting the height of this to 19 causes failure
36         SkRect rect = SkRect::MakeXYWH(20, 0, 100, 20);
37 
38         canvas->save();
39         canvas->clipRect(rect, SkRegion::kReplace_Op, true);
40         canvas->drawRect(r, p);
41         canvas->restore();
42 
43         p.setColor(SK_ColorBLUE);
44         p.setStrokeWidth(2);
45         canvas->drawRect(rect, p);
46 
47         p.setColor(SK_ColorRED);
48         p.setAntiAlias(true);
49         p.setStyle(SkPaint::kStroke_Style);
50         p.setStrokeWidth(22);
51 
52         SkRect r2 = SkRect::MakeXYWH(20, 140, 100, 100);
53         // setting the height of this to 19 causes failure
54         SkRect rect2 = SkRect::MakeXYWH(20, 120, 100, 19);
55 
56         canvas->save();
57         canvas->clipRect(rect2, SkRegion::kReplace_Op, true);
58         canvas->drawRect(r2, p);
59         canvas->restore();
60 
61         p.setColor(SK_ColorBLUE);
62         p.setStrokeWidth(2);
63         canvas->drawRect(rect2, p);
64     }
65 
66 private:
67     typedef skiagm::GM INHERITED;
68 };
69 
70 DEF_GM( return SkNEW(ClipStrokeRectGM); )
71 
72