Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Side by Side Diff: samplecode/SampleGradients.cpp

Issue 1772463002: use Make instead of Create to return a shared shader (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: partial update of skia call-sites Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "SampleCode.h" 8 #include "SampleCode.h"
9 #include "SkView.h" 9 #include "SkView.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
11 #include "SkGradientShader.h" 11 #include "SkGradientShader.h"
12 12
13 static SkShader* setgrad(const SkRect& r, SkColor c0, SkColor c1) { 13 static sk_sp<SkShader> setgrad(const SkRect& r, SkColor c0, SkColor c1) {
14 SkColor colors[] = { c0, c1 }; 14 SkColor colors[] = { c0, c1 };
15 SkPoint pts[] = { { r.fLeft, r.fTop }, { r.fRight, r.fTop } }; 15 SkPoint pts[] = { { r.fLeft, r.fTop }, { r.fRight, r.fTop } };
16 return SkGradientShader::CreateLinear(pts, colors, nullptr, 2, SkShader::kCl amp_TileMode); 16 return SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkShader::kClam p_TileMode);
17 } 17 }
18 18
19 static void test_alphagradients(SkCanvas* canvas) { 19 static void test_alphagradients(SkCanvas* canvas) {
20 SkRect r; 20 SkRect r;
21 r.set(SkIntToScalar(10), SkIntToScalar(10), 21 r.set(SkIntToScalar(10), SkIntToScalar(10),
22 SkIntToScalar(410), SkIntToScalar(30)); 22 SkIntToScalar(410), SkIntToScalar(30));
23 SkPaint p, p2; 23 SkPaint p, p2;
24 p2.setStyle(SkPaint::kStroke_Style); 24 p2.setStyle(SkPaint::kStroke_Style);
25 25
26 p.setShader(setgrad(r, 0xFF00FF00, 0x0000FF00))->unref(); 26 p.setShader(setgrad(r, 0xFF00FF00, 0x0000FF00));
27 canvas->drawRect(r, p); 27 canvas->drawRect(r, p);
28 canvas->drawRect(r, p2); 28 canvas->drawRect(r, p2);
29 29
30 r.offset(0, r.height() + SkIntToScalar(4)); 30 r.offset(0, r.height() + SkIntToScalar(4));
31 p.setShader(setgrad(r, 0xFF00FF00, 0x00000000))->unref(); 31 p.setShader(setgrad(r, 0xFF00FF00, 0x00000000));
32 canvas->drawRect(r, p); 32 canvas->drawRect(r, p);
33 canvas->drawRect(r, p2); 33 canvas->drawRect(r, p2);
34 34
35 r.offset(0, r.height() + SkIntToScalar(4)); 35 r.offset(0, r.height() + SkIntToScalar(4));
36 p.setShader(setgrad(r, 0xFF00FF00, 0x00FF0000))->unref(); 36 p.setShader(setgrad(r, 0xFF00FF00, 0x00FF0000));
37 canvas->drawRect(r, p); 37 canvas->drawRect(r, p);
38 canvas->drawRect(r, p2); 38 canvas->drawRect(r, p2);
39 } 39 }
40 40
41 /////////////////////////////////////////////////////////////////////////////// 41 ///////////////////////////////////////////////////////////////////////////////
42 42
43 struct GradData { 43 struct GradData {
44 int fCount; 44 int fCount;
45 const SkColor* fColors; 45 const SkColor* fColors;
46 const SkScalar* fPos; 46 const SkScalar* fPos;
47 }; 47 };
48 48
49 static const SkColor gColors[] = { 49 static const SkColor gColors[] = {
50 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK 50 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK
51 }; 51 };
52 static const SkScalar gPos0[] = { 0, SK_Scalar1 }; 52 static const SkScalar gPos0[] = { 0, SK_Scalar1 };
53 static const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; 53 static const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 };
54 static const SkScalar gPos2[] = { 54 static const SkScalar gPos2[] = {
55 0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1 55 0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1
56 }; 56 };
57 57
58 static const GradData gGradData[] = { 58 static const GradData gGradData[] = {
59 { 2, gColors, nullptr }, 59 { 2, gColors, nullptr },
60 { 2, gColors, gPos0 }, 60 { 2, gColors, gPos0 },
61 { 2, gColors, gPos1 }, 61 { 2, gColors, gPos1 },
62 { 5, gColors, nullptr }, 62 { 5, gColors, nullptr },
63 { 5, gColors, gPos2 } 63 { 5, gColors, gPos2 }
64 }; 64 };
65 65
66 static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, SkShader ::TileMode tm) { 66 static sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, Sk Shader::TileMode tm) {
67 return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, data.fCo unt, tm); 67 return SkGradientShader::MakeLinear(pts, data.fColors, data.fPos, data.fCoun t, tm);
68 } 68 }
69 69
70 static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, SkShader ::TileMode tm) { 70 static sk_sp<SkShader> MakeRadial(const SkPoint pts[2], const GradData& data, Sk Shader::TileMode tm) {
71 SkPoint center; 71 SkPoint center;
72 center.set(SkScalarAve(pts[0].fX, pts[1].fX), 72 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
73 SkScalarAve(pts[0].fY, pts[1].fY)); 73 SkScalarAve(pts[0].fY, pts[1].fY));
74 return SkGradientShader::CreateRadial(center, center.fX, data.fColors, 74 return SkGradientShader::MakeRadial(center, center.fX, data.fColors,
75 data.fPos, data.fCount, tm); 75 data.fPos, data.fCount, tm);
76 } 76 }
77 77
78 static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, SkShader: :TileMode tm) { 78 static sk_sp<SkShader> MakeSweep(const SkPoint pts[2], const GradData& data, SkS hader::TileMode tm) {
79 SkPoint center; 79 SkPoint center;
80 center.set(SkScalarAve(pts[0].fX, pts[1].fX), 80 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
81 SkScalarAve(pts[0].fY, pts[1].fY)); 81 SkScalarAve(pts[0].fY, pts[1].fY));
82 return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, dat a.fPos, data.fCount); 82 return SkGradientShader::MakeSweep(center.fX, center.fY, data.fColors, data. fPos, data.fCount);
83 } 83 }
84 84
85 static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data, SkShad er::TileMode tm) { 85 static sk_sp<SkShader> Make2Conical(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
86 SkPoint center0, center1; 86 SkPoint center0, center1;
87 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 87 center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
88 SkScalarAve(pts[0].fY, pts[1].fY)); 88 SkScalarAve(pts[0].fY, pts[1].fY));
89 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 89 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
90 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 90 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
91 return SkGradientShader::CreateTwoPointConical( 91 return SkGradientShader::MakeTwoPointConical(
92 center1, (pts[1].fX - pts[0].fX) / 7, 92 center1, (pts[1].fX - pts[0].fX) / 7,
93 center0, (pts[1].fX - pts[0].fX) / 2, 93 center0, (pts[1].fX - pts[0].fX) / 2,
94 data.fColors, data.fPos, data.fCount, tm); 94 data.fColors, data.fPos, data.fCount, tm);
95 } 95 }
96 96
97 static SkShader* Make2ConicalConcentric(const SkPoint pts[2], const GradData& da ta, 97 static sk_sp<SkShader> Make2ConicalConcentric(const SkPoint pts[2], const GradDa ta& data,
98 SkShader::TileMode tm) { 98 SkShader::TileMode tm) {
99 SkPoint center; 99 SkPoint center;
100 center.set(SkScalarAve(pts[0].fX, pts[1].fX), 100 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
101 SkScalarAve(pts[0].fY, pts[1].fY)); 101 SkScalarAve(pts[0].fY, pts[1].fY));
102 return SkGradientShader::CreateTwoPointConical( 102 return SkGradientShader::MakeTwoPointConical(
103 center, (pts[1].fX - pts[0].fX) / 7, 103 center, (pts[1].fX - pts[0].fX) / 7,
104 center, (pts[1].fX - pts[0].fX) / 2, 104 center, (pts[1].fX - pts[0].fX) / 2,
105 data.fColors, data.fPos, data.fCount, tm); 105 data.fColors, data.fPos, data.fCount, tm);
106 } 106 }
107 107
108 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, SkSha der::TileMode tm); 108 typedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm);
109 109
110 static const GradMaker gGradMakers[] = { 110 static const GradMaker gGradMakers[] = {
111 MakeLinear, MakeRadial, MakeSweep, Make2Conical, Make2ConicalConcentric 111 MakeLinear, MakeRadial, MakeSweep, Make2Conical, Make2ConicalConcentric
112 }; 112 };
113 113
114 /////////////////////////////////////////////////////////////////////////////// 114 ///////////////////////////////////////////////////////////////////////////////
115 115
116 class GradientsView : public SampleView { 116 class GradientsView : public SampleView {
117 public: 117 public:
118 GradientsView() { 118 GradientsView() {
119 this->setBGColor(0xFFDDDDDD); 119 this->setBGColor(0xFFDDDDDD);
120 } 120 }
121 121
122 protected: 122 protected:
123 // overrides from SkEventSink 123 bool onQuery(SkEvent* evt) override {
124 virtual bool onQuery(SkEvent* evt) {
125 if (SampleCode::TitleQ(*evt)) { 124 if (SampleCode::TitleQ(*evt)) {
126 SampleCode::TitleR(evt, "Gradients"); 125 SampleCode::TitleR(evt, "Gradients");
127 return true; 126 return true;
128 } 127 }
129 return this->INHERITED::onQuery(evt); 128 return this->INHERITED::onQuery(evt);
130 } 129 }
131 130
132 virtual void onDrawContent(SkCanvas* canvas) { 131 void onDrawContent(SkCanvas* canvas) override {
133 SkPoint pts[2] = { 132 SkPoint pts[2] = {
134 { 0, 0 }, 133 { 0, 0 },
135 { SkIntToScalar(100), SkIntToScalar(100) } 134 { SkIntToScalar(100), SkIntToScalar(100) }
136 }; 135 };
137 SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 136 SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) };
138 SkPaint paint; 137 SkPaint paint;
139 paint.setDither(true); 138 paint.setDither(true);
140 139
141 canvas->save(); 140 canvas->save();
142 canvas->translate(SkIntToScalar(20), SkIntToScalar(10)); 141 canvas->translate(SkIntToScalar(20), SkIntToScalar(10));
143 142
144 for (int tm = 0; tm < SkShader::kTileModeCount; ++tm) { 143 for (int tm = 0; tm < SkShader::kTileModeCount; ++tm) {
145 canvas->save(); 144 canvas->save();
146 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { 145 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) {
147 canvas->save(); 146 canvas->save();
148 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) { 147 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
149 SkShader* shader; 148 paint.setShader(gGradMakers[j](pts, gGradData[i], (SkShader: :TileMode)tm));
150 shader = gGradMakers[j](pts, gGradData[i], (SkShader::TileMo de)tm);
151 paint.setShader(shader)->unref();
152 canvas->drawRect(r, paint); 149 canvas->drawRect(r, paint);
153 canvas->translate(0, SkIntToScalar(120)); 150 canvas->translate(0, SkIntToScalar(120));
154 } 151 }
155 canvas->restore(); 152 canvas->restore();
156 canvas->translate(SkIntToScalar(120), 0); 153 canvas->translate(SkIntToScalar(120), 0);
157 } 154 }
158 canvas->restore(); 155 canvas->restore();
159 canvas->translate(SK_ARRAY_COUNT(gGradData)*SkIntToScalar(120), 0); 156 canvas->translate(SK_ARRAY_COUNT(gGradData)*SkIntToScalar(120), 0);
160 } 157 }
161 canvas->restore(); 158 canvas->restore();
162 159
163 canvas->translate(0, SkIntToScalar(370)); 160 canvas->translate(0, SkIntToScalar(370));
164 if (false) { // avoid bit rot, suppress warning 161 if (false) { // avoid bit rot, suppress warning
165 test_alphagradients(canvas); 162 test_alphagradients(canvas);
166 } 163 }
167 this->inval(nullptr); 164 this->inval(nullptr);
168 } 165 }
169 166
170 private: 167 private:
171 typedef SampleView INHERITED; 168 typedef SampleView INHERITED;
172 }; 169 };
173 170
174 /////////////////////////////////////////////////////////////////////////////// 171 ///////////////////////////////////////////////////////////////////////////////
175 172
176 static SkView* MyFactory() { return new GradientsView; } 173 static SkView* MyFactory() { return new GradientsView; }
177 static SkViewRegister reg(MyFactory); 174 static SkViewRegister reg(MyFactory);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698