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    virtual SkString onShortName() SK_OVERRIDE {
20        return SkString("clip_strokerect");
21    }
22
23    virtual SkISize onISize() SK_OVERRIDE {
24        return SkISize::Make(200, 400);
25    }
26
27    virtual void onDraw(SkCanvas* canvas) SK_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    virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; }
67
68private:
69    typedef skiagm::GM INHERITED;
70};
71
72DEF_GM( return SkNEW(ClipStrokeRectGM); )
73
74