OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 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 "gm.h" | 8 #include "gm.h" |
9 #include "SkGradientShader.h" | 9 #include "SkGradientShader.h" |
10 | 10 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 } | 103 } |
104 | 104 |
105 static SkShader* Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, | 105 static SkShader* Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, |
106 SkShader::TileMode tm, SkUnitMapper* mapper) { | 106 SkShader::TileMode tm, SkUnitMapper* mapper) { |
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( | 112 return SkGradientShader::CreateTwoPointConical( |
113 center1, 0.0, | 113 center1, 0.f, |
114 center0, (pts[1].fX - pts[0].f
X) / 2, | 114 center0, (pts[1].fX - pts[0].f
X) / 2, |
115 data.fColors, data.fPos, data.
fCount, tm, mapper); | 115 data.fColors, data.fPos, data.
fCount, tm, mapper); |
116 } | 116 } |
117 | 117 |
118 static SkShader* Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradData& d
ata, | 118 static SkShader* Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradData& d
ata, |
119 SkShader::TileMode tm, SkUnitMapper* mapper) { | 119 SkShader::TileMode tm, SkUnitMapper* mapper) { |
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( | 125 return SkGradientShader::CreateTwoPointConical( |
126 center1, (pts[1].fX - pts[0].f
X) / 2, | 126 center1, (pts[1].fX - pts[0].f
X) / 2, |
127 center0, 0.0, | 127 center0, 0.f, |
128 data.fColors, data.fPos, data.
fCount, tm, mapper); | 128 data.fColors, data.fPos, data.
fCount, tm, mapper); |
129 } | 129 } |
130 | 130 |
131 static SkShader* Make2ConicalZeroRadCenter(const SkPoint pts[2], const GradData&
data, | 131 static SkShader* Make2ConicalZeroRadCenter(const SkPoint pts[2], const GradData&
data, |
132 SkShader::TileMode tm, SkUnitMapper* mapper) { | 132 SkShader::TileMode tm, SkUnitMapper* mapper) { |
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( | 138 return SkGradientShader::CreateTwoPointConical( |
139 center0, 0.0, | 139 center0, 0.f, |
140 center0, (pts[1].fX - pts[0].f
X) / 2, | 140 center0, (pts[1].fX - pts[0].f
X) / 2, |
141 data.fColors, data.fPos, data.
fCount, tm, mapper); | 141 data.fColors, data.fPos, data.
fCount, tm, mapper); |
142 } | 142 } |
143 | 143 |
144 static SkShader* Make2ConicalZeroRadOutside(const SkPoint pts[2], const GradData
& data, | 144 static SkShader* Make2ConicalZeroRadOutside(const SkPoint pts[2], const GradData
& data, |
145 SkShader::TileMode tm, SkUnitMapper* mapper) { | 145 SkShader::TileMode tm, SkUnitMapper* mapper) { |
146 SkPoint center0, center1; | 146 SkPoint center0, center1; |
147 SkScalar radius0 = 0.0; | 147 SkScalar radius0 = 0.f; |
148 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 148 SkScalar radius1 = SkScalarDiv(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::CreateTwoPointConical(center0, radius0, |
152 center1, radius1, | 152 center1, radius1, |
153 data.fColors, data.fPos, | 153 data.fColors, data.fPos, |
154 data.fCount, tm, mapper); | 154 data.fCount, tm, mapper); |
155 } | 155 } |
156 | 156 |
157 static SkShader* Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], const Grad
Data& data, | 157 static SkShader* Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], const Grad
Data& data, |
158 SkShader::TileMode tm, SkUnitMapper* mapper) { | 158 SkShader::TileMode tm, SkUnitMapper* mapper) { |
159 SkPoint center0, center1; | 159 SkPoint center0, center1; |
160 SkScalar radius0 = 0.0; | 160 SkScalar radius0 = 0.f; |
161 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 161 SkScalar radius1 = SkScalarDiv(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::CreateTwoPointConical(center1, radius1, |
165 center0, radius0, | 165 center0, radius0, |
166 data.fColors, data.fPos, | 166 data.fColors, data.fPos, |
167 data.fCount, tm, mapper); | 167 data.fCount, tm, mapper); |
168 } | 168 } |
169 | 169 |
170 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data, | 170 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data, |
(...skipping 19 matching lines...) Expand all Loading... |
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::CreateTwoPointConical(center0, radius0, |
193 center1, radius1, | 193 center1, radius1, |
194 data.fColors, data.fPos, | 194 data.fColors, data.fPos, |
195 data.fCount, tm, mapper); | 195 data.fCount, tm, mapper); |
196 } | 196 } |
197 static SkShader* Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const GradData&
data, | 197 static SkShader* Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const GradData&
data, |
198 SkShader::TileMode tm, SkUnitMapper* mapper) { | 198 SkShader::TileMode tm, SkUnitMapper* mapper) { |
199 SkPoint center0, center1; | 199 SkPoint center0, center1; |
200 SkScalar radius0 = 0.0; | 200 SkScalar radius0 = 0.f; |
201 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 201 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
202 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 202 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
203 SkScalarAve(pts[0].fY, pts[1].fY)); | 203 SkScalarAve(pts[0].fY, pts[1].fY)); |
204 center0.set(center1.fX + radius1, center1.fY); | 204 center0.set(center1.fX + radius1, center1.fY); |
205 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 205 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
206 center1, radius1, | 206 center1, radius1, |
207 data.fColors, data.fPos, | 207 data.fColors, data.fPos, |
208 data.fCount, tm, mapper); | 208 data.fCount, tm, mapper); |
209 } | 209 } |
210 | 210 |
211 static SkShader* Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const GradData&
data, | 211 static SkShader* Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const GradData&
data, |
212 SkShader::TileMode tm, SkUnitMapper* mapper) { | 212 SkShader::TileMode tm, SkUnitMapper* mapper) { |
213 SkPoint center0, center1; | 213 SkPoint center0, center1; |
214 SkScalar radius0 = 0.0; | 214 SkScalar radius0 = 0.f; |
215 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 215 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
216 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 216 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
217 SkScalarAve(pts[0].fY, pts[1].fY)); | 217 SkScalarAve(pts[0].fY, pts[1].fY)); |
218 center0.set(center1.fX, center1.fY + radius1); | 218 center0.set(center1.fX, center1.fY + radius1); |
219 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 219 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
220 center1, radius1, | 220 center1, radius1, |
221 data.fColors, data.fPos, | 221 data.fColors, data.fPos, |
222 data.fCount, tm, mapper); | 222 data.fCount, tm, mapper); |
223 } | 223 } |
224 | 224 |
(...skipping 26 matching lines...) Expand all Loading... |
251 } | 251 } |
252 | 252 |
253 static SkShader* Make2ConicalInsideSmallRad(const SkPoint pts[2], const GradData
& data, | 253 static SkShader* Make2ConicalInsideSmallRad(const SkPoint pts[2], const GradData
& data, |
254 SkShader::TileMode tm, SkUnitMapper* mapper) { | 254 SkShader::TileMode tm, SkUnitMapper* mapper) { |
255 SkPoint center0, center1; | 255 SkPoint center0, center1; |
256 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 256 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
257 SkScalarAve(pts[0].fY, pts[1].fY)); | 257 SkScalarAve(pts[0].fY, pts[1].fY)); |
258 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 258 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
259 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 259 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
260 return SkGradientShader::CreateTwoPointConical( | 260 return SkGradientShader::CreateTwoPointConical( |
261 center0, 0.0000000000000000001
, | 261 center0, 0.0000000000000000001
f, |
262 center0, (pts[1].fX - pts[0].f
X) / 2, | 262 center0, (pts[1].fX - pts[0].f
X) / 2, |
263 data.fColors, data.fPos, data.
fCount, tm, mapper); | 263 data.fColors, data.fPos, data.
fCount, tm, mapper); |
264 } | 264 } |
265 | 265 |
266 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, | 266 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, |
267 SkShader::TileMode tm, SkUnitMapper* mapper); | 267 SkShader::TileMode tm, SkUnitMapper* mapper); |
268 | 268 |
269 static const GradMaker gGradMakersOutside[] = { | 269 static const GradMaker gGradMakersOutside[] = { |
270 Make2ConicalOutside, Make2ConicalOutsideFlip, | 270 Make2ConicalOutside, Make2ConicalOutsideFlip, |
271 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside | 271 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 static GM* MyFactory1(void*) { return new ConicalGradientsGM(kInside_GradCaseTyp
e); } | 366 static GM* MyFactory1(void*) { return new ConicalGradientsGM(kInside_GradCaseTyp
e); } |
367 static GMRegistry reg1(MyFactory1); | 367 static GMRegistry reg1(MyFactory1); |
368 | 368 |
369 static GM* MyFactory2(void*) { return new ConicalGradientsGM(kOutside_GradCaseTy
pe); } | 369 static GM* MyFactory2(void*) { return new ConicalGradientsGM(kOutside_GradCaseTy
pe); } |
370 static GMRegistry reg2(MyFactory2); | 370 static GMRegistry reg2(MyFactory2); |
371 | 371 |
372 static GM* MyFactory3(void*) { return new ConicalGradientsGM(kEdge_GradCaseType)
; } | 372 static GM* MyFactory3(void*) { return new ConicalGradientsGM(kEdge_GradCaseType)
; } |
373 static GMRegistry reg3(MyFactory3); | 373 static GMRegistry reg3(MyFactory3); |
374 } | 374 } |
375 | 375 |
OLD | NEW |