OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "SkGradientShader.h" | 9 #include "SkGradientShader.h" |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... | |
30 SK_ColorRED, SK_ColorGREEN, SK_ColorGREEN, SK_ColorBLUE | 30 SK_ColorRED, SK_ColorGREEN, SK_ColorGREEN, SK_ColorBLUE |
31 }; | 31 }; |
32 | 32 |
33 static const GradData gGradData[] = { | 33 static const GradData gGradData[] = { |
34 { 2, gColors, gPos0 }, | 34 { 2, gColors, gPos0 }, |
35 { 2, gColors, gPos1 }, | 35 { 2, gColors, gPos1 }, |
36 { 5, gColors, gPos2 }, | 36 { 5, gColors, gPos2 }, |
37 { 4, gColorClamp, gPosClamp } | 37 { 4, gColorClamp, gPosClamp } |
38 }; | 38 }; |
39 | 39 |
40 static SkShader* Make2ConicalOutside(const SkPoint pts[2], const GradData& data, | 40 static sk_sp<SkShader> Make2ConicalOutside(const SkPoint pts[2], const GradData& data, |
41 SkShader::TileMode tm, const SkMatrix& loca lMatrix) { | 41 SkShader::TileMode tm, const SkMatrix& loca lMatrix) { |
42 SkPoint center0, center1; | 42 SkPoint center0, center1; |
43 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; | 43 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; |
44 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 44 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
45 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 45 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
46 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 46 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
47 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 47 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
48 center1, radius1, | 48 center1, radius1, |
f(malita)
2016/03/13 16:18:01
nit: indentation
(also everything below)
reed1
2016/03/13 18:25:24
Done.
| |
49 data.fColors, data.fPos, | 49 data.fColors, data.fPos, |
50 data.fCount, tm, 0, &localMat rix); | 50 data.fCount, tm, 0, &localMat rix); |
51 } | 51 } |
52 | 52 |
53 static SkShader* Make2ConicalOutsideFlip(const SkPoint pts[2], const GradData& d ata, | 53 static sk_sp<SkShader> Make2ConicalOutsideFlip(const SkPoint pts[2], const GradD ata& data, |
54 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 54 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
55 SkPoint center0, center1; | 55 SkPoint center0, center1; |
56 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; | 56 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; |
57 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 57 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
58 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 58 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
59 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 59 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
60 return SkGradientShader::CreateTwoPointConical(center1, radius1, | 60 return SkGradientShader::MakeTwoPointConical(center1, radius1, |
61 center0, radius0, | 61 center0, radius0, |
62 data.fColors, data.fPos, | 62 data.fColors, data.fPos, |
63 data.fCount, tm, 0, &localMat rix); | 63 data.fCount, tm, 0, &localMat rix); |
64 } | 64 } |
65 | 65 |
66 static SkShader* Make2ConicalInside(const SkPoint pts[2], const GradData& data, | 66 static sk_sp<SkShader> Make2ConicalInside(const SkPoint pts[2], const GradData& data, |
67 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 67 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
68 SkPoint center0, center1; | 68 SkPoint center0, center1; |
69 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 69 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
70 SkScalarAve(pts[0].fY, pts[1].fY)); | 70 SkScalarAve(pts[0].fY, pts[1].fY)); |
71 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 71 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
72 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 72 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
73 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0]. fX) / 7, | 73 return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX ) / 7, |
74 center0, (pts[1].fX - pts[0]. fX) / 2, | 74 center0, (pts[1].fX - pts[0]. fX) / 2, |
75 data.fColors, data.fPos, data .fCount, tm, | 75 data.fColors, data.fPos, data .fCount, tm, |
76 0, &localMatrix); | 76 0, &localMatrix); |
77 } | 77 } |
78 | 78 |
79 static SkShader* Make2ConicalInsideFlip(const SkPoint pts[2], const GradData& da ta, | 79 static sk_sp<SkShader> Make2ConicalInsideFlip(const SkPoint pts[2], const GradDa ta& data, |
80 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 80 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
81 SkPoint center0, center1; | 81 SkPoint center0, center1; |
82 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 82 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
83 SkScalarAve(pts[0].fY, pts[1].fY)); | 83 SkScalarAve(pts[0].fY, pts[1].fY)); |
84 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 84 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
85 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 85 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
86 return SkGradientShader::CreateTwoPointConical(center0, (pts[1].fX - pts[0]. fX) / 2, | 86 return SkGradientShader::MakeTwoPointConical(center0, (pts[1].fX - pts[0].fX ) / 2, |
87 center1, (pts[1].fX - pts[0]. fX) / 7, | 87 center1, (pts[1].fX - pts[0]. fX) / 7, |
88 data.fColors, data.fPos, data .fCount, tm, | 88 data.fColors, data.fPos, data .fCount, tm, |
89 0, &localMatrix); | 89 0, &localMatrix); |
90 } | 90 } |
91 | 91 |
92 static SkShader* Make2ConicalInsideCenter(const SkPoint pts[2], const GradData& data, | 92 static sk_sp<SkShader> Make2ConicalInsideCenter(const SkPoint pts[2], const Grad Data& data, |
93 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 93 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
94 SkPoint center0, center1; | 94 SkPoint center0, center1; |
95 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 95 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
96 SkScalarAve(pts[0].fY, pts[1].fY)); | 96 SkScalarAve(pts[0].fY, pts[1].fY)); |
97 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 97 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
98 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 98 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
99 return SkGradientShader::CreateTwoPointConical(center0, (pts[1].fX - pts[0]. fX) / 7, | 99 return SkGradientShader::MakeTwoPointConical(center0, (pts[1].fX - pts[0].fX ) / 7, |
100 center0, (pts[1].fX - pts[0]. fX) / 2, | 100 center0, (pts[1].fX - pts[0]. fX) / 2, |
101 data.fColors, data.fPos, data .fCount, tm, | 101 data.fColors, data.fPos, data .fCount, tm, |
102 0, &localMatrix); | 102 0, &localMatrix); |
103 } | 103 } |
104 | 104 |
105 static SkShader* Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, | 105 static sk_sp<SkShader> Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, |
106 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 106 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
107 SkPoint center0, center1; | 107 SkPoint center0, center1; |
108 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 108 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
109 SkScalarAve(pts[0].fY, pts[1].fY)); | 109 SkScalarAve(pts[0].fY, pts[1].fY)); |
110 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 110 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
111 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 111 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
112 return SkGradientShader::CreateTwoPointConical(center1, 0.f, | 112 return SkGradientShader::MakeTwoPointConical(center1, 0.f, |
113 center0, (pts[1].fX - pts[0]. fX) / 2, | 113 center0, (pts[1].fX - pts[0]. fX) / 2, |
114 data.fColors, data.fPos, data .fCount, tm, | 114 data.fColors, data.fPos, data .fCount, tm, |
115 0, &localMatrix); | 115 0, &localMatrix); |
116 } | 116 } |
117 | 117 |
118 static SkShader* Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradData& d ata, | 118 static sk_sp<SkShader> Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradD ata& data, |
119 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 119 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
120 SkPoint center0, center1; | 120 SkPoint center0, center1; |
121 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 121 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
122 SkScalarAve(pts[0].fY, pts[1].fY)); | 122 SkScalarAve(pts[0].fY, pts[1].fY)); |
123 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 123 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
124 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 124 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
125 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0]. fX) / 2, | 125 return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX ) / 2, |
126 center0, 0.f, | 126 center0, 0.f, |
127 data.fColors, data.fPos, data .fCount, tm, | 127 data.fColors, data.fPos, data .fCount, tm, |
128 0, &localMatrix); | 128 0, &localMatrix); |
129 } | 129 } |
130 | 130 |
131 static SkShader* Make2ConicalZeroRadCenter(const SkPoint pts[2], const GradData& data, | 131 static sk_sp<SkShader> Make2ConicalZeroRadCenter(const SkPoint pts[2], const Gra dData& data, |
132 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 132 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
133 SkPoint center0, center1; | 133 SkPoint center0, center1; |
134 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 134 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
135 SkScalarAve(pts[0].fY, pts[1].fY)); | 135 SkScalarAve(pts[0].fY, pts[1].fY)); |
136 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 136 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
137 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 137 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
138 return SkGradientShader::CreateTwoPointConical(center0, 0.f, | 138 return SkGradientShader::MakeTwoPointConical(center0, 0.f, |
139 center0, (pts[1].fX - pts[0]. fX) / 2, | 139 center0, (pts[1].fX - pts[0]. fX) / 2, |
140 data.fColors, data.fPos, data .fCount, tm, | 140 data.fColors, data.fPos, data .fCount, tm, |
141 0, &localMatrix); | 141 0, &localMatrix); |
142 } | 142 } |
143 | 143 |
144 static SkShader* Make2ConicalZeroRadOutside(const SkPoint pts[2], const GradData & data, | 144 static sk_sp<SkShader> Make2ConicalZeroRadOutside(const SkPoint pts[2], const Gr adData& data, |
145 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 145 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
146 SkPoint center0, center1; | 146 SkPoint center0, center1; |
147 SkScalar radius0 = 0.f; | 147 SkScalar radius0 = 0.f; |
148 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 148 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
149 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 149 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
150 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 150 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
151 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 151 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
152 center1, radius1, | 152 center1, radius1, |
153 data.fColors, data.fPos, | 153 data.fColors, data.fPos, |
154 data.fCount, tm, 0, &localMat rix); | 154 data.fCount, tm, 0, &localMat rix); |
155 } | 155 } |
156 | 156 |
157 static SkShader* Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], const Grad Data& data, | 157 static sk_sp<SkShader> Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], cons t GradData& data, |
158 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 158 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
159 SkPoint center0, center1; | 159 SkPoint center0, center1; |
160 SkScalar radius0 = 0.f; | 160 SkScalar radius0 = 0.f; |
161 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 161 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
162 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 162 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
163 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 163 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
164 return SkGradientShader::CreateTwoPointConical(center1, radius1, | 164 return SkGradientShader::MakeTwoPointConical(center1, radius1, |
165 center0, radius0, | 165 center0, radius0, |
166 data.fColors, data.fPos, | 166 data.fColors, data.fPos, |
167 data.fCount, tm, 0, &localMat rix); | 167 data.fCount, tm, 0, &localMat rix); |
168 } | 168 } |
169 | 169 |
170 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data, | 170 static sk_sp<SkShader> Make2ConicalEdgeX(const SkPoint pts[2], const GradData& d ata, |
171 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 171 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
172 SkPoint center0, center1; | 172 SkPoint center0, center1; |
173 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; | 173 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; |
174 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 174 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
175 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 175 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
176 SkScalarAve(pts[0].fY, pts[1].fY)); | 176 SkScalarAve(pts[0].fY, pts[1].fY)); |
177 center0.set(center1.fX + radius1, center1.fY); | 177 center0.set(center1.fX + radius1, center1.fY); |
178 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 178 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
179 center1, radius1, | 179 center1, radius1, |
180 data.fColors, data.fPos, | 180 data.fColors, data.fPos, |
181 data.fCount, tm, 0, &localMat rix); | 181 data.fCount, tm, 0, &localMat rix); |
182 } | 182 } |
183 | 183 |
184 static SkShader* Make2ConicalEdgeY(const SkPoint pts[2], const GradData& data, | 184 static sk_sp<SkShader> Make2ConicalEdgeY(const SkPoint pts[2], const GradData& d ata, |
185 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 185 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
186 SkPoint center0, center1; | 186 SkPoint center0, center1; |
187 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; | 187 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; |
188 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 188 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
189 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 189 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
190 SkScalarAve(pts[0].fY, pts[1].fY)); | 190 SkScalarAve(pts[0].fY, pts[1].fY)); |
191 center0.set(center1.fX, center1.fY + radius1); | 191 center0.set(center1.fX, center1.fY + radius1); |
192 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 192 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
193 center1, radius1, | 193 center1, radius1, |
194 data.fColors, data.fPos, | 194 data.fColors, data.fPos, |
195 data.fCount, tm, 0, &localMat rix); | 195 data.fCount, tm, 0, &localMat rix); |
196 } | 196 } |
197 | 197 |
198 static SkShader* Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const GradData& data, | 198 static sk_sp<SkShader> Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const Grad Data& data, |
199 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 199 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
200 SkPoint center0, center1; | 200 SkPoint center0, center1; |
201 SkScalar radius0 = 0.f; | 201 SkScalar radius0 = 0.f; |
202 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 202 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
203 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 203 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
204 SkScalarAve(pts[0].fY, pts[1].fY)); | 204 SkScalarAve(pts[0].fY, pts[1].fY)); |
205 center0.set(center1.fX + radius1, center1.fY); | 205 center0.set(center1.fX + radius1, center1.fY); |
206 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 206 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
207 center1, radius1, | 207 center1, radius1, |
208 data.fColors, data.fPos, | 208 data.fColors, data.fPos, |
209 data.fCount, tm, 0, &localMat rix); | 209 data.fCount, tm, 0, &localMat rix); |
210 } | 210 } |
211 | 211 |
212 static SkShader* Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const GradData& data, | 212 static sk_sp<SkShader> Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const Grad Data& data, |
213 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 213 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
214 SkPoint center0, center1; | 214 SkPoint center0, center1; |
215 SkScalar radius0 = 0.f; | 215 SkScalar radius0 = 0.f; |
216 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 216 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
217 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 217 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
218 SkScalarAve(pts[0].fY, pts[1].fY)); | 218 SkScalarAve(pts[0].fY, pts[1].fY)); |
219 center0.set(center1.fX, center1.fY + radius1); | 219 center0.set(center1.fX, center1.fY + radius1); |
220 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 220 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
221 center1, radius1, | 221 center1, radius1, |
222 data.fColors, data.fPos, | 222 data.fColors, data.fPos, |
223 data.fCount, tm, 0, &localMat rix); | 223 data.fCount, tm, 0, &localMat rix); |
224 } | 224 } |
225 | 225 |
226 static SkShader* Make2ConicalTouchX(const SkPoint pts[2], const GradData& data, | 226 static sk_sp<SkShader> Make2ConicalTouchX(const SkPoint pts[2], const GradData& data, |
227 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 227 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
228 SkPoint center0, center1; | 228 SkPoint center0, center1; |
229 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; | 229 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; |
230 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 230 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
231 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 231 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
232 SkScalarAve(pts[0].fY, pts[1].fY)); | 232 SkScalarAve(pts[0].fY, pts[1].fY)); |
233 center0.set(center1.fX - radius1 + radius0, center1.fY); | 233 center0.set(center1.fX - radius1 + radius0, center1.fY); |
234 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 234 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
235 center1, radius1, | 235 center1, radius1, |
236 data.fColors, data.fPos, | 236 data.fColors, data.fPos, |
237 data.fCount, tm, 0, &localMat rix); | 237 data.fCount, tm, 0, &localMat rix); |
238 } | 238 } |
239 | 239 |
240 static SkShader* Make2ConicalTouchY(const SkPoint pts[2], const GradData& data, | 240 static sk_sp<SkShader> Make2ConicalTouchY(const SkPoint pts[2], const GradData& data, |
241 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 241 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
242 SkPoint center0, center1; | 242 SkPoint center0, center1; |
243 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; | 243 SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7; |
244 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; | 244 SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
245 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 245 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
246 SkScalarAve(pts[0].fY, pts[1].fY)); | 246 SkScalarAve(pts[0].fY, pts[1].fY)); |
247 center0.set(center1.fX, center1.fY + radius1 - radius0); | 247 center0.set(center1.fX, center1.fY + radius1 - radius0); |
248 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 248 return SkGradientShader::MakeTwoPointConical(center0, radius0, |
249 center1, radius1, | 249 center1, radius1, |
250 data.fColors, data.fPos, | 250 data.fColors, data.fPos, |
251 data.fCount, tm, 0, &localMat rix); | 251 data.fCount, tm, 0, &localMat rix); |
252 } | 252 } |
253 | 253 |
254 static SkShader* Make2ConicalInsideSmallRad(const SkPoint pts[2], const GradData & data, | 254 static sk_sp<SkShader> Make2ConicalInsideSmallRad(const SkPoint pts[2], const Gr adData& data, |
255 SkShader::TileMode tm, const SkMatrix& localMatrix) { | 255 SkShader::TileMode tm, const SkMatrix& localMatrix) { |
256 SkPoint center0, center1; | 256 SkPoint center0, center1; |
257 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 257 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
258 SkScalarAve(pts[0].fY, pts[1].fY)); | 258 SkScalarAve(pts[0].fY, pts[1].fY)); |
259 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 259 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
260 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 260 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
261 return SkGradientShader::CreateTwoPointConical(center0, 0.000000000000000000 1f, | 261 return SkGradientShader::MakeTwoPointConical(center0, 0.0000000000000000001f , |
262 center0, (pts[1].fX - pts[0]. fX) / 2, | 262 center0, (pts[1].fX - pts[0]. fX) / 2, |
263 data.fColors, data.fPos, data .fCount, tm, | 263 data.fColors, data.fPos, data .fCount, tm, |
264 0, &localMatrix); | 264 0, &localMatrix); |
265 } | 265 } |
266 | 266 |
267 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, | 267 typedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData& data, |
268 SkShader::TileMode tm, const SkMatrix& localMatri x); | 268 SkShader::TileMode tm, const SkMatrix& localMatri x); |
269 | 269 |
270 static const GradMaker gGradMakersOutside[] = { | 270 static const GradMaker gGradMakersOutside[] = { |
271 Make2ConicalOutside, Make2ConicalOutsideFlip, | 271 Make2ConicalOutside, Make2ConicalOutsideFlip, |
272 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside | 272 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside |
273 }; | 273 }; |
274 | 274 |
275 static const GradMaker gGradMakersInside[] = { | 275 static const GradMaker gGradMakersInside[] = { |
276 Make2ConicalInside, Make2ConicalInsideFlip, Make2ConicalInsideCenter, | 276 Make2ConicalInside, Make2ConicalInsideFlip, Make2ConicalInsideCenter, |
277 Make2ConicalZeroRad, Make2ConicalZeroRadFlip, Make2ConicalZeroRadCenter, | 277 Make2ConicalZeroRad, Make2ConicalZeroRadFlip, Make2ConicalZeroRadCenter, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { | 340 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { |
341 canvas->save(); | 341 canvas->save(); |
342 for (int j = 0; j < count; j++) { | 342 for (int j = 0; j < count; j++) { |
343 SkMatrix scale = SkMatrix::I(); | 343 SkMatrix scale = SkMatrix::I(); |
344 | 344 |
345 if (i == 3) { // if the clamp case | 345 if (i == 3) { // if the clamp case |
346 scale.setScale(0.5f, 0.5f); | 346 scale.setScale(0.5f, 0.5f); |
347 scale.postTranslate(25.f, 25.f); | 347 scale.postTranslate(25.f, 25.f); |
348 } | 348 } |
349 | 349 |
350 SkShader* shader = gradMaker[j](pts, gGradData[i], tm, scale); | 350 paint.setShader(gradMaker[j](pts, gGradData[i], tm, scale)); |
351 paint.setShader(shader); | |
352 canvas->drawRect(r, paint); | 351 canvas->drawRect(r, paint); |
353 shader->unref(); | |
354 canvas->translate(0, SkIntToScalar(120)); | 352 canvas->translate(0, SkIntToScalar(120)); |
355 } | 353 } |
356 canvas->restore(); | 354 canvas->restore(); |
357 canvas->translate(SkIntToScalar(120), 0); | 355 canvas->translate(SkIntToScalar(120), 0); |
358 } | 356 } |
359 } | 357 } |
360 | 358 |
361 private: | 359 private: |
362 typedef GM INHERITED; | 360 typedef GM INHERITED; |
363 | 361 |
364 GradCaseType fGradCaseType; | 362 GradCaseType fGradCaseType; |
365 SkString fName; | 363 SkString fName; |
366 bool fDither; | 364 bool fDither; |
367 }; | 365 }; |
368 /////////////////////////////////////////////////////////////////////////////// | 366 /////////////////////////////////////////////////////////////////////////////// |
369 | 367 |
370 DEF_GM( return new ConicalGradientsGM(kInside_GradCaseType, true); ) | 368 DEF_GM( return new ConicalGradientsGM(kInside_GradCaseType, true); ) |
371 DEF_GM( return new ConicalGradientsGM(kOutside_GradCaseType, true); ) | 369 DEF_GM( return new ConicalGradientsGM(kOutside_GradCaseType, true); ) |
372 DEF_GM( return new ConicalGradientsGM(kEdge_GradCaseType, true); ) | 370 DEF_GM( return new ConicalGradientsGM(kEdge_GradCaseType, true); ) |
373 | 371 |
374 DEF_GM( return new ConicalGradientsGM(kInside_GradCaseType, false); ) | 372 DEF_GM( return new ConicalGradientsGM(kInside_GradCaseType, false); ) |
375 DEF_GM( return new ConicalGradientsGM(kOutside_GradCaseType, false); ) | 373 DEF_GM( return new ConicalGradientsGM(kOutside_GradCaseType, false); ) |
376 DEF_GM( return new ConicalGradientsGM(kEdge_GradCaseType, false); ) | 374 DEF_GM( return new ConicalGradientsGM(kEdge_GradCaseType, false); ) |
377 | 375 |
378 } | 376 } |
OLD | NEW |