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
12class ClipStrokeRectGM : public skiagm::GM {
13public:
14    ClipStrokeRectGM() {
15
16    }
17
18protected:
19    SkString onShortName() override {
20        return SkString("clip_strokerect");
21    }
22
23    SkISize onISize() override {
24        return SkISize::Make(200, 400);
25    }
26
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
66private:
67    typedef skiagm::GM INHERITED;
68};
69
70DEF_GM(return new ClipStrokeRectGM;)
71