Revert "Remove SkLights include from SkCanvas.h"
[platform/upstream/libSkiaSharp.git] / gm / stlouisarch.cpp
1 /*
2  * Copyright 2015 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 #include "SkTArray.h"
12
13 namespace skiagm {
14
15 // this GM tests hairlines which fill nearly the entire render target
16 class StLouisArchGM : public GM {
17 protected:
18     SkString onShortName() override {
19         return SkString("stlouisarch");
20     }
21
22     SkISize onISize() override { return SkISize::Make((int)kWidth, (int)kHeight); }
23
24     void onOnceBeforeDraw() override {
25         {
26             SkPath* bigQuad = &fPaths.push_back();
27             bigQuad->moveTo(0, 0);
28             bigQuad->quadTo(kWidth/2, kHeight, kWidth, 0);
29         }
30
31         {
32             SkPath* degenBigQuad = &fPaths.push_back();
33             SkScalar yPos = kHeight / 2 + 10;
34             degenBigQuad->moveTo(0, yPos);
35             degenBigQuad->quadTo(0, yPos, kWidth, yPos);
36         }
37
38
39         {
40             SkPath* bigCubic = &fPaths.push_back();
41             bigCubic->moveTo(0, 0);
42             bigCubic->cubicTo(0, kHeight,
43                               kWidth, kHeight,
44                               kWidth, 0);
45         }
46
47         {
48             SkPath* degenBigCubic = &fPaths.push_back();
49             SkScalar yPos = kHeight / 2;
50             degenBigCubic->moveTo(0, yPos);
51             degenBigCubic->cubicTo(0, yPos,
52                                    0, yPos,
53                                    kWidth, yPos);
54         }
55
56         {
57             SkPath* bigConic = &fPaths.push_back();
58             bigConic->moveTo(0, 0);
59             bigConic->conicTo(kWidth/2, kHeight, kWidth, 0, .5);
60         }
61
62         {
63             SkPath* degenBigConic = &fPaths.push_back();
64             SkScalar yPos = kHeight / 2 - 10;
65             degenBigConic->moveTo(0, yPos);
66             degenBigConic->conicTo(0, yPos, kWidth, yPos, .5);
67         }
68     }
69
70     void onDraw(SkCanvas* canvas) override {
71         canvas->save();
72         canvas->scale(1, -1);
73         canvas->translate(0, -kHeight);
74         for (int p = 0; p < fPaths.count(); ++p) {
75             SkPaint paint;
76             paint.setARGB(0xff, 0, 0, 0);
77             paint.setAntiAlias(true);
78             paint.setStyle(SkPaint::kStroke_Style);
79             paint.setStrokeWidth(0);
80             canvas->drawPath(fPaths[p], paint);
81         }
82         canvas->restore();
83     }
84
85     const SkScalar kWidth = 256;
86     const SkScalar kHeight = 256;
87
88 private:
89     SkTArray<SkPath> fPaths;
90     typedef GM INHERITED;
91 };
92
93 //////////////////////////////////////////////////////////////////////////////
94
95 static GM* MyFactory(void*) { return new StLouisArchGM; }
96 static GMRegistry reg(MyFactory);
97
98 }