OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkGradientShader.h" | 10 #include "SkGradientShader.h" |
11 #include "SkRandom.h" | 11 #include "SkRandom.h" |
12 | 12 |
13 static SkShader* make_shader(int w, int h) { | 13 static SkShader* make_shader(SkScalar w, SkScalar h) { |
14 const SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE }; | 14 const SkColor colors[] = { |
15 const SkPoint center = { SkScalarHalf(w), SkScalarHalf(h) }; | 15 SK_ColorRED, SK_ColorCYAN, SK_ColorGREEN, SK_ColorWHITE, |
16 const SkScalar radius = w / 2; | 16 SK_ColorMAGENTA, SK_ColorBLUE, SK_ColorYELLOW, |
| 17 }; |
| 18 const SkPoint pts[] = { { w/4, 0 }, { 3*w/4, h } }; |
17 | 19 |
18 return SkGradientShader::CreateRadial(center, radius, colors, NULL, | 20 return SkGradientShader::CreateLinear(pts, colors, NULL, |
19 SK_ARRAY_COUNT(colors), | 21 SK_ARRAY_COUNT(colors), |
20 SkShader::kMirror_TileMode); | 22 SkShader::kMirror_TileMode); |
21 } | 23 } |
22 | 24 |
23 class VerticesGM : public skiagm::GM { | 25 class VerticesGM : public skiagm::GM { |
24 SkPoint fPts[9]; | 26 SkPoint fPts[9]; |
25 SkPoint fTexs[9]; | 27 SkPoint fTexs[9]; |
26 SkColor fColors[9]; | 28 SkColor fColors[9]; |
27 SkShader* fShader; | 29 SkShader* fShader; |
28 | 30 |
29 public: | 31 public: |
30 VerticesGM() : fShader(NULL) { | 32 VerticesGM() : fShader(NULL) { |
31 } | 33 } |
32 | 34 |
33 virtual ~VerticesGM() { | 35 virtual ~VerticesGM() { |
34 SkSafeUnref(fShader); | 36 SkSafeUnref(fShader); |
35 } | 37 } |
36 | 38 |
37 protected: | 39 protected: |
38 virtual void onOnceBeforeDraw() SK_OVERRIDE { | 40 virtual void onOnceBeforeDraw() SK_OVERRIDE { |
39 fPts[0].set(0, 0); fPts[1].set(100, 10); fPts[2].set(200, 0); | 41 const SkScalar X = 150; |
40 fPts[3].set(10, 100); fPts[4].set(100, 100); fPts[5].set(190, 100); | 42 const SkScalar Y = 150; |
41 fPts[6].set(0, 200); fPts[7].set(100, 190); fPts[8].set(200, 200); | |
42 | 43 |
43 int w = 200; | 44 fPts[0].set(0, 0); fPts[1].set(X/2, 10); fPts[2].set(X, 0); |
44 int h = 200; | 45 fPts[3].set(10, Y/2); fPts[4].set(X/2, Y/2); fPts[5].set(X-10, Y/2); |
| 46 fPts[6].set(0, Y); fPts[7].set(X/2, Y-10); fPts[8].set(X, Y); |
| 47 |
| 48 const SkScalar w = 200; |
| 49 const SkScalar h = 200; |
45 | 50 |
46 fTexs[0].set(0, 0); fTexs[1].set(w/2, 0); fTexs[2].set(w, 0); | 51 fTexs[0].set(0, 0); fTexs[1].set(w/2, 0); fTexs[2].set(w, 0); |
47 fTexs[3].set(0, h/2); fTexs[4].set(w/2, h/2); fTexs[5].set(w, h/2); | 52 fTexs[3].set(0, h/2); fTexs[4].set(w/2, h/2); fTexs[5].set(w, h/2); |
48 fTexs[6].set(0, h); fTexs[7].set(w/2, h); fTexs[8].set(w, h); | 53 fTexs[6].set(0, h); fTexs[7].set(w/2, h); fTexs[8].set(w, h); |
49 | 54 |
50 fShader = make_shader(w, h); | 55 fShader = make_shader(w, h); |
51 | 56 |
52 SkRandom rand; | 57 SkRandom rand; |
53 for (size_t i = 0; i < SK_ARRAY_COUNT(fColors); ++i) { | 58 for (size_t i = 0; i < SK_ARRAY_COUNT(fColors); ++i) { |
54 fColors[i] = rand.nextU() | 0xFF202020; | 59 fColors[i] = rand.nextU() | 0xFF000000; |
55 } | 60 } |
56 } | 61 } |
57 | 62 |
58 virtual SkString onShortName() SK_OVERRIDE { | 63 virtual SkString onShortName() SK_OVERRIDE { |
59 return SkString("vertices"); | 64 return SkString("vertices"); |
60 } | 65 } |
61 | 66 |
62 virtual SkISize onISize() SK_OVERRIDE { | 67 virtual SkISize onISize() SK_OVERRIDE { |
63 return SkISize::Make(800, 800); | 68 return SkISize::Make(600, 600); |
64 } | 69 } |
65 | 70 |
66 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 71 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
| 72 // start with the center of a 3x3 grid |
67 static const uint16_t fan[] = { | 73 static const uint16_t fan[] = { |
68 4, | 74 4, |
69 0, 1, 2, 5, 8, 7, 6, 3, 0 | 75 0, 1, 2, 5, 8, 7, 6, 3, 0 |
70 }; | 76 }; |
71 | 77 |
72 const struct { | 78 const struct { |
73 const SkColor* fColors; | 79 const SkColor* fColors; |
74 const SkPoint* fTexs; | 80 const SkPoint* fTexs; |
75 } rec[] = { | 81 } rec[] = { |
76 { fColors, NULL }, | 82 { fColors, NULL }, |
(...skipping 12 matching lines...) Expand all Loading... |
89 | 95 |
90 canvas->translate(20, 20); | 96 canvas->translate(20, 20); |
91 for (size_t j = 0; j < SK_ARRAY_COUNT(modes); ++j) { | 97 for (size_t j = 0; j < SK_ARRAY_COUNT(modes); ++j) { |
92 SkXfermode* xfer = SkXfermode::Create(modes[j]); | 98 SkXfermode* xfer = SkXfermode::Create(modes[j]); |
93 canvas->save(); | 99 canvas->save(); |
94 for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { | 100 for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { |
95 canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, | 101 canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, |
96 SK_ARRAY_COUNT(fPts), fPts, | 102 SK_ARRAY_COUNT(fPts), fPts, |
97 rec[i].fTexs, rec[i].fColors, | 103 rec[i].fTexs, rec[i].fColors, |
98 xfer, fan, SK_ARRAY_COUNT(fan), paint); | 104 xfer, fan, SK_ARRAY_COUNT(fan), paint); |
99 canvas->translate(250, 0); | 105 canvas->translate(200, 0); |
100 } | 106 } |
101 canvas->restore(); | 107 canvas->restore(); |
102 canvas->translate(0, 250); | 108 canvas->translate(0, 200); |
103 xfer->unref(); | 109 xfer->unref(); |
104 } | 110 } |
105 } | 111 } |
106 | 112 |
| 113 #if 0 |
107 virtual uint32_t onGetFlags() const { | 114 virtual uint32_t onGetFlags() const { |
108 return kSkipPipe_Flag | kSkipPicture_Flag; | 115 return kSkipPipe_Flag | kSkipPicture_Flag; |
109 } | 116 } |
| 117 #endif |
110 | 118 |
111 private: | 119 private: |
112 typedef skiagm::GM INHERITED; | 120 typedef skiagm::GM INHERITED; |
113 }; | 121 }; |
114 | 122 |
115 DEF_GM( return SkNEW(VerticesGM); ) | 123 DEF_GM( return SkNEW(VerticesGM); ) |
OLD | NEW |