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

Side by Side Diff: gm/nate_gradients.cpp

Issue 18552005: Animated the PathUtils Sample to show path contours (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Added function pointers to sample to reduce code in OnDrawContent method. Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1
2 /*
3 * Copyright 2011 Google Inc.
scroggo 2013/07/08 19:11:31 2013
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8 #include "gm.h"
9 #include "SkGradientShader.h"
10
11 using namespace skiagm;
12
13 struct GradData {
14 int fCount;
15 const SkColor* fColors;
16 const SkScalar* fPos;
17 };
18
19 static const SkColor gColors[] = {
20 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
21 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
22 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
23 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
24 };
25 static const SkScalar gPos0[] = { 0, SK_Scalar1 };
26 static const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 };
27 static const SkScalar gPos2[] = {
28 0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1
29 };
30
31 static const GradData gGradData[] = {
32 { 20, gColors, NULL },
33 };
34
35 static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data,
36 SkShader::TileMode tm, SkUnitMapper* mapper) {
37 return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos,
38 data.fCount, tm, mapper);
39 }
40
41 static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data,
42 SkShader::TileMode tm, SkUnitMapper* mapper) {
43 SkPoint center;
44 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
45 SkScalarAve(pts[0].fY, pts[1].fY));
46 return SkGradientShader::CreateRadial(center, center.fX, data.fColors,
47 data.fPos, data.fCount, tm, mapper);
48 }
49
50 static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data,
51 SkShader::TileMode, SkUnitMapper* mapper) {
52 SkPoint center;
53 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
54 SkScalarAve(pts[0].fY, pts[1].fY));
55 return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors,
56 data.fPos, data.fCount, mapper);
57 }
58
59 static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data,
60 SkShader::TileMode tm, SkUnitMapper* mapper) {
61 SkPoint center0, center1;
62 center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
63 SkScalarAve(pts[0].fY, pts[1].fY));
64 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
65 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
66 return SkGradientShader::CreateTwoPointRadial(
67 center1, (pts[1].fX - pts[0].f X) / 7,
68 center0, (pts[1].fX - pts[0].f X) / 2,
69 data.fColors, data.fPos, data. fCount, tm, mapper);
70 }
71
72 static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data,
73 SkShader::TileMode tm, SkUnitMapper* mapper) {
74 SkPoint center0, center1;
75 SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
76 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
77 center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
78 center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
79 return SkGradientShader::CreateTwoPointConical(center1, radius1,
80 center0, radius0,
81 data.fColors, data.fPos,
82 data.fCount, tm, mapper);
83 }
84
85 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
86 SkShader::TileMode tm, SkUnitMapper* mapper);
87 static const GradMaker gGradMakers[] = {
88 MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2Conical
89 };
90
91 ///////////////////////////////////////////////////////////////////////////////
92
93 class GradientsGM : public GM {
scroggo 2013/07/08 19:11:31 What is this new GM demonstrating that isn't cover
94 public:
95 GradientsGM() {
96 this->setBGColor(0xFFDDDDDD);
97 }
98
99 protected:
100 SkString onShortName() { return SkString("nate_gradients"); }
101
102 virtual SkISize onISize() { return make_isize(640, 615); }
103
104 virtual void onDraw(SkCanvas* canvas) {
105
106 SkPoint pts[2] = {
107 { 0, 0 },
108 { SkIntToScalar(100), SkIntToScalar(100) }
109 };
110 SkShader::TileMode tm = SkShader::kClamp_TileMode;
111 SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) };
112 SkPaint paint;
113 paint.setAntiAlias(true);
114
115 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
116 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) {
117 canvas->save();
118 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
119 SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, NULL);
120 paint.setShader(shader);
121 canvas->drawRect(r, paint);
122 shader->unref();
123 canvas->translate(0, SkIntToScalar(120));
124 }
125 canvas->restore();
126 canvas->translate(SkIntToScalar(120), 0);
127 }
128 }
129
130 private:
131 typedef GM INHERITED;
132 };
133
134
135
136 ///////////////////////////////////////////////////////////////////////////////
137
138 static GM* MyFactory(void*) { return new GradientsGM; }
139 static GMRegistry reg(MyFactory);
140
141
OLDNEW
« no previous file with comments | « gm/gradients.cpp ('k') | gyp/gmslides.gypi » ('j') | samplecode/SamplePathUtils.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698