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

Side by Side Diff: gm/gradient_matrix.cpp

Issue 16467002: Added tests for radial gradients with shader matrices (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: radial gradients test Created 7 years, 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 static const SkColor gColors[] = { 10 static const SkColor gColors[] = {
11 SK_ColorRED, SK_ColorYELLOW 11 SK_ColorRED, SK_ColorYELLOW
12 }; 12 };
13 static const SkScalar gPosAll[] = { 13 static const SkScalar gPosAll[] = {
14 0, SK_Scalar1 14 0, SK_Scalar1
15 }; 15 };
16 16
17 static SkShader* SimpleGradient(const SkPoint pts[2]) { 17 static SkShader* SimpleLinearGradient(const SkPoint pts[2]) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 MakeLinearGradient
ducky 2013/06/11 19:51:01 Done.
18 return SkGradientShader::CreateLinear(pts, gColors, gPosAll, 18 return SkGradientShader::CreateLinear(pts, gColors, gPosAll,
19 2, SkShader::kClamp_TileMode, NULL); 19 2, SkShader::kClamp_TileMode, NULL);
20 } 20 }
21 21
22 static SkShader* SimpleRadialGradient(const SkPoint pts[2], const GradData& data ,
vandebo (ex-Chrome) 2013/06/11 05:15:25 MakeRadialGRadient
ducky 2013/06/11 19:51:01 Done.
23 SkShader::TileMode tm, SkUnitMapper* mapper) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 line up previous line (first const).
ducky 2013/06/11 19:51:01 Done.
24 SkPoint center;
25 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
26 SkScalarAve(pts[0].fY, pts[1].fY));
27 float radius = (center - pts[0]).length();
28 return SkGradientShader::CreateRadial(center, radius, gColors,
reed1 2013/06/11 13:54:16 Another common way to pass these... ..., gColors,
ducky 2013/06/11 19:51:01 Done.
29 gPosAll, 2, SkShader::kClamp_TileMode, NULL);
vandebo (ex-Chrome) 2013/06/11 05:15:25 nit: gPosAll, 2, on previous line.
ducky 2013/06/11 19:51:01 Done.
30 }
31
22 namespace skiagm { 32 namespace skiagm {
23 33
24 class GradientMatrixGM : public GM { 34 class GradientMatrixGM : public GM {
25 public: 35 public:
26 GradientMatrixGM() { 36 GradientMatrixGM() {
27 this->setBGColor(0xFFDDDDDD); 37 this->setBGColor(0xFFDDDDDD);
28 } 38 }
29 39
30 protected: 40 protected:
31 SkString onShortName() { 41 SkString onShortName() {
32 return SkString("gradient_matrix"); 42 return SkString("gradient_matrix");
33 } 43 }
34 44
35 virtual SkISize onISize() { return make_isize(800, 400); } 45 virtual SkISize onISize() { return make_isize(800, 800); }
reed1 2013/06/11 13:54:16 make_isize() is a hold-over from before we had goo
ducky 2013/06/11 19:51:01 Done.
36 46
37 virtual void onDraw(SkCanvas* canvas) { 47 virtual void onDraw(SkCanvas* canvas) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 This method is rather repetitive. Can you pack th
ducky 2013/06/11 19:51:01 Done.
38 const int TESTGRID_X = 200; 48 const int TESTGRID_X = 200;
39 const int TESTGRID_Y = 200; 49 const int TESTGRID_Y = 200;
40 50
41 canvas->save(); 51 canvas->save();
42 52
43 testGrad(canvas, 0, 0, 1, 0); 53 drawLinearGradient(canvas, 0, 0, 1, 0);
44 canvas->translate(TESTGRID_X, 0); 54 canvas->translate(TESTGRID_X, 0);
45 testGrad(canvas, 0, 0, 0, 1); 55 drawLinearGradient(canvas, 0, 0, 0, 1);
46 canvas->translate(TESTGRID_X, 0); 56 canvas->translate(TESTGRID_X, 0);
47 testGrad(canvas, 1, 0, 0, 0); 57 drawLinearGradient(canvas, 1, 0, 0, 0);
48 canvas->translate(TESTGRID_X, 0); 58 canvas->translate(TESTGRID_X, 0);
49 testGrad(canvas, 0, 1, 0, 0); 59 drawLinearGradient(canvas, 0, 1, 0, 0);
50 60
51 canvas->restore(); 61 canvas->restore();
52 canvas->translate(0, TESTGRID_Y); 62 canvas->translate(0, TESTGRID_Y);
53 canvas->save(); 63 canvas->save();
54 64
55 testGrad(canvas, 0, 0, 1, 1); 65 drawLinearGradient(canvas, 0, 0, 1, 1);
56 canvas->translate(TESTGRID_X, 0); 66 canvas->translate(TESTGRID_X, 0);
57 testGrad(canvas, 1, 1, 0, 0); 67 drawLinearGradient(canvas, 1, 1, 0, 0);
58 canvas->translate(TESTGRID_X, 0); 68 canvas->translate(TESTGRID_X, 0);
59 testGrad(canvas, 1, 0, 0, 1); 69 drawLinearGradient(canvas, 1, 0, 0, 1);
60 canvas->translate(TESTGRID_X, 0); 70 canvas->translate(TESTGRID_X, 0);
61 testGrad(canvas, 0, 1, 1, 0); 71 drawLinearGradient(canvas, 0, 1, 1, 0);
72
73 canvas->restore();
74 canvas->translate(0, TESTGRID_Y);
75 canvas->save();
76
77 drawRadialGradient(canvas, 0, 0.5, 1, 0.5);
78 canvas->translate(TESTGRID_X, 0);
79 drawRadialGradient(canvas, 0.5, 0, 0.5, 1);
80 canvas->translate(TESTGRID_X, 0);
81 drawRadialGradient(canvas, 1, 0.5, 0, 0.5);
82 canvas->translate(TESTGRID_X, 0);
83 drawRadialGradient(canvas, 0.5, 1, 0.5, 0);
84
85 canvas->restore();
86 canvas->translate(0, TESTGRID_Y);
87 canvas->save();
88
89 drawRadialGradient(canvas, 0, 0, 1, 1);
90 canvas->translate(TESTGRID_X, 0);
91 drawRadialGradient(canvas, 1, 1, 0, 0);
92 canvas->translate(TESTGRID_X, 0);
93 drawRadialGradient(canvas, 1, 0, 0, 1);
94 canvas->translate(TESTGRID_X, 0);
95 drawRadialGradient(canvas, 0, 1, 1, 0);
62 } 96 }
63 97
64 virtual void simpleGrad(SkCanvas* canvas) { 98 virtual void simpleGradient(SkCanvas* canvas) {
65 SkPoint pts[2] = { 99 SkPoint pts[2] = {
66 { 100, 0 }, 100 { 100, 0 },
67 { 0, 0 } 101 { 0, 0 }
68 }; 102 };
69 SkMatrix shaderMat = SkMatrix(); 103 SkMatrix shaderMat = SkMatrix();
70 shaderMat.setAll(1, 0, 0, 104 shaderMat.setAll(1, 0, 0,
71 0, 1, 0, 105 0, 1, 0,
72 0, 0, 1); 106 0, 0, 1);
73 SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers 107 SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers
74 108
75 SkShader* shader = SimpleGradient(pts); 109 SkShader* shader = SimpleLinearGradient(pts);
76 shader->setLocalMatrix(shaderMat); 110 shader->setLocalMatrix(shaderMat);
77 SkPaint paint; 111 SkPaint paint;
78 paint.setAntiAlias(true); 112 paint.setAntiAlias(true);
113 paint.setShader(shader);
114 canvas->drawRect(rectGrad, paint);
115 shader->unref();
116 }
117
118 virtual void drawRadialGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 This method is basically a duplicate of the next o
ducky 2013/06/11 19:51:01 Done.
119 SkPoint pts[2] = {
120 { x1, y1 },
121 { x2, y2 }
122 };
123 SkMatrix shaderMat = SkMatrix();
124 shaderMat.setAll(138, 0, 43,
125 0, 106, 61,
126 0, 0, 1);
127 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers
128
129 SkShader* shader = SimpleRadialGradient(pts);
130 shader->setLocalMatrix(shaderMat);
131 SkPaint paint;
132 paint.setAntiAlias(true);
79 paint.setShader(shader); 133 paint.setShader(shader);
80 canvas->drawRect(rectGrad, paint); 134 canvas->drawRect(rectGrad, paint);
81 shader->unref(); 135 shader->unref();
82 } 136 }
83 137
84 virtual void testGrad(SkCanvas* canvas, int x1, int y1, int x2, int y2) { 138 virtual void drawLinearGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) {
85 SkPoint pts[2] = { 139 SkPoint pts[2] = {
86 { x1, y1 }, 140 { x1, y1 },
87 { x2, y2 } 141 { x2, y2 }
88 }; 142 };
89 SkMatrix shaderMat = SkMatrix(); 143 SkMatrix shaderMat = SkMatrix();
90 shaderMat.setAll(138, 0, 43, 144 shaderMat.setAll(138, 0, 43,
91 0, 106, 61, 145 0, 106, 61,
92 0, 0, 1); 146 0, 0, 1);
93 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers 147 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers
94 148
95 SkShader* shader = SimpleGradient(pts); 149 SkShader* shader = SimpleLinearGradient(pts);
96 shader->setLocalMatrix(shaderMat); 150 shader->setLocalMatrix(shaderMat);
97 SkPaint paint; 151 SkPaint paint;
98 paint.setAntiAlias(true); 152 paint.setAntiAlias(true);
99 paint.setShader(shader); 153 paint.setShader(shader);
100 canvas->drawRect(rectGrad, paint); 154 canvas->drawRect(rectGrad, paint);
101 shader->unref(); 155 shader->unref();
102 } 156 }
103 157
104 private: 158 private:
105 typedef GM INHERITED; 159 typedef GM INHERITED;
106 }; 160 };
107 161
108 static GM* MyFactory(void*) { return new GradientMatrixGM; } 162 static GM* MyFactory(void*) { return new GradientMatrixGM; }
109 static GMRegistry reg(MyFactory); 163 static GMRegistry reg(MyFactory);
110 164
111 } 165 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698