1b3eba478d5bed5fb2b5f0f224738c8c292cebf36george/*
2b3eba478d5bed5fb2b5f0f224738c8c292cebf36george * Copyright 2011 Google Inc.
3b3eba478d5bed5fb2b5f0f224738c8c292cebf36george *
4b3eba478d5bed5fb2b5f0f224738c8c292cebf36george * Use of this source code is governed by a BSD-style license that can be
5b3eba478d5bed5fb2b5f0f224738c8c292cebf36george * found in the LICENSE file.
6b3eba478d5bed5fb2b5f0f224738c8c292cebf36george */
7b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
8b3eba478d5bed5fb2b5f0f224738c8c292cebf36george#include "gm.h"
9b3eba478d5bed5fb2b5f0f224738c8c292cebf36george#include "SkCanvas.h"
10b3eba478d5bed5fb2b5f0f224738c8c292cebf36george#include "SkPath.h"
11b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
12b3eba478d5bed5fb2b5f0f224738c8c292cebf36georgeclass ClipStrokeRectGM : public skiagm::GM {
13b3eba478d5bed5fb2b5f0f224738c8c292cebf36georgepublic:
14b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    ClipStrokeRectGM() {
15b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
16b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    }
17b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
18b3eba478d5bed5fb2b5f0f224738c8c292cebf36georgeprotected:
1936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
20b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        return SkString("clip_strokerect");
21b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    }
22b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
2336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
24b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        return SkISize::Make(200, 400);
25b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    }
26b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
2736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
28b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        SkPaint p;
29b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setColor(SK_ColorRED);
30b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setAntiAlias(true);
31b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStyle(SkPaint::kStroke_Style);
32b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStrokeWidth(22);
33b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
34b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        SkRect r = SkRect::MakeXYWH(20, 20, 100, 100);
35b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        // setting the height of this to 19 causes failure
36b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        SkRect rect = SkRect::MakeXYWH(20, 0, 100, 20);
37b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
38b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->save();
39b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->clipRect(rect, SkRegion::kReplace_Op, true);
40b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->drawRect(r, p);
41b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->restore();
42b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
43b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setColor(SK_ColorBLUE);
44b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStrokeWidth(2);
45b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->drawRect(rect, p);
46b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
47b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setColor(SK_ColorRED);
48b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setAntiAlias(true);
49b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStyle(SkPaint::kStroke_Style);
50b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStrokeWidth(22);
51b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
52b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        SkRect r2 = SkRect::MakeXYWH(20, 140, 100, 100);
53b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        // setting the height of this to 19 causes failure
54b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        SkRect rect2 = SkRect::MakeXYWH(20, 120, 100, 19);
55b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
56b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->save();
57b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->clipRect(rect2, SkRegion::kReplace_Op, true);
58b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->drawRect(r2, p);
59b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->restore();
60b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
61b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setColor(SK_ColorBLUE);
62b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        p.setStrokeWidth(2);
63b3eba478d5bed5fb2b5f0f224738c8c292cebf36george        canvas->drawRect(rect2, p);
64b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    }
65b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
66b3eba478d5bed5fb2b5f0f224738c8c292cebf36georgeprivate:
67b3eba478d5bed5fb2b5f0f224738c8c292cebf36george    typedef skiagm::GM INHERITED;
68b3eba478d5bed5fb2b5f0f224738c8c292cebf36george};
69b3eba478d5bed5fb2b5f0f224738c8c292cebf36george
702880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_GM(return new ClipStrokeRectGM;)
71