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 #include "gm.h" | 7 #include "gm.h" |
8 #include "SkGradientShader.h" | 8 #include "SkGradientShader.h" |
9 | 9 |
10 using namespace skiagm; | 10 using namespace skiagm; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 SK_ColorBLACK, | 196 SK_ColorBLACK, |
197 }; | 197 }; |
198 const int N = SK_ARRAY_COUNT(colors); | 198 const int N = SK_ARRAY_COUNT(colors); |
199 SkScalar pos[N]; | 199 SkScalar pos[N]; |
200 for (int i = 0; i < N; ++i) { | 200 for (int i = 0; i < N; ++i) { |
201 pos[i] = SK_Scalar1 * i / (N - 1); | 201 pos[i] = SK_Scalar1 * i / (N - 1); |
202 } | 202 } |
203 rec->construct(colors, pos, N); | 203 rec->construct(colors, pos, N); |
204 } | 204 } |
205 | 205 |
| 206 static void make3(ColorPos* rec) { |
| 207 const SkColor colors[] = { |
| 208 SK_ColorRED, SK_ColorBLUE, SK_ColorBLUE, SK_ColorGREEN, SK_ColorGREEN, S
K_ColorBLACK, |
| 209 }; |
| 210 const SkScalar pos[] = { |
| 211 0, 0, 0.5f, 0.5, 1, 1, |
| 212 }; |
| 213 rec->construct(colors, pos, SK_ARRAY_COUNT(colors)); |
| 214 } |
| 215 |
206 class GradientsManyColorsGM : public GM { | 216 class GradientsManyColorsGM : public GM { |
207 enum { | 217 enum { |
208 W = 800, | 218 W = 800, |
209 }; | 219 }; |
210 SkAutoTUnref<SkShader> fShader; | 220 SkAutoTUnref<SkShader> fShader; |
211 | 221 |
212 typedef void (*Proc)(ColorPos*); | 222 typedef void (*Proc)(ColorPos*); |
213 public: | 223 public: |
214 GradientsManyColorsGM(bool dither) : fDither(dither) {} | 224 GradientsManyColorsGM(bool dither) : fDither(dither) {} |
215 | 225 |
216 protected: | 226 protected: |
217 | 227 |
218 SkString onShortName() override { | 228 SkString onShortName() override { |
219 return SkString(fDither ? "gradients_many" : "gradients_many_nodither"); | 229 return SkString(fDither ? "gradients_many" : "gradients_many_nodither"); |
220 } | 230 } |
221 | 231 |
222 SkISize onISize() override { return SkISize::Make(850, 100); } | 232 SkISize onISize() override { return SkISize::Make(880, 400); } |
223 | 233 |
224 void onDraw(SkCanvas* canvas) override { | 234 void onDraw(SkCanvas* canvas) override { |
225 const Proc procs[] = { | 235 const Proc procs[] = { |
226 make0, make1, make2, | 236 make0, make1, make2, make3, |
227 }; | 237 }; |
228 const SkPoint pts[] = { | 238 const SkPoint pts[] = { |
229 { 0, 0 }, | 239 { 0, 0 }, |
230 { SkIntToScalar(W), 0 }, | 240 { SkIntToScalar(W), 0 }, |
231 }; | 241 }; |
232 const SkRect r = SkRect::MakeWH(SkIntToScalar(W), 30); | 242 const SkRect r = SkRect::MakeWH(SkIntToScalar(W), 30); |
233 | 243 |
234 SkPaint paint; | 244 SkPaint paint; |
235 paint.setDither(fDither); | 245 paint.setDither(fDither); |
236 | 246 |
237 canvas->translate(20, 20); | 247 canvas->translate(40, 20); |
238 | 248 |
239 for (int i = 0; i <= 8; ++i) { | 249 for (int i = 0; i <= 8; ++i) { |
240 SkScalar x = r.width() * i / 8; | 250 SkScalar x = r.width() * i / 8; |
241 canvas->drawLine(x, 0, x, 10000, paint); | 251 canvas->drawLine(x, 0, x, 10000, paint); |
242 } | 252 } |
243 | 253 |
| 254 // expand the drawing rect so we exercise clampping in the gradients |
| 255 const SkRect drawR = r.makeOutset(20, 0); |
244 for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { | 256 for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { |
245 ColorPos rec; | 257 ColorPos rec; |
246 procs[i](&rec); | 258 procs[i](&rec); |
247 SkShader* s = SkGradientShader::CreateLinear(pts, rec.fColors, rec.f
Pos, rec.fCount, | 259 SkShader* s = SkGradientShader::CreateLinear(pts, rec.fColors, rec.f
Pos, rec.fCount, |
248 SkShader::kClamp_TileMo
de); | 260 SkShader::kClamp_TileMo
de); |
249 paint.setShader(s)->unref(); | 261 paint.setShader(s)->unref(); |
250 canvas->drawRect(r, paint); | 262 canvas->drawRect(drawR, paint); |
251 canvas->translate(0, r.height() + 20); | 263 |
| 264 canvas->save(); |
| 265 canvas->translate(r.centerX(), r.height() + 4); |
| 266 canvas->scale(-1, 1); |
| 267 canvas->translate(-r.centerX(), 0); |
| 268 canvas->drawRect(drawR, paint); |
| 269 canvas->restore(); |
| 270 |
| 271 canvas->translate(0, r.height() + 2*r.height() + 8); |
252 } | 272 } |
253 } | 273 } |
254 | 274 |
255 private: | 275 private: |
256 bool fDither; | 276 bool fDither; |
257 | 277 |
258 typedef GM INHERITED; | 278 typedef GM INHERITED; |
259 }; | 279 }; |
260 | 280 |
261 /////////////////////////////////////////////////////////////////////////////// | 281 /////////////////////////////////////////////////////////////////////////////// |
262 | 282 |
263 DEF_GM(return new GradientsNoTextureGM(true);) | 283 DEF_GM(return new GradientsNoTextureGM(true);) |
264 DEF_GM(return new GradientsNoTextureGM(false);) | 284 DEF_GM(return new GradientsNoTextureGM(false);) |
265 DEF_GM(return new GradientsManyColorsGM(true);) | 285 DEF_GM(return new GradientsManyColorsGM(true);) |
266 DEF_GM(return new GradientsManyColorsGM(false);) | 286 DEF_GM(return new GradientsManyColorsGM(false);) |
OLD | NEW |