OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 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 "Test.h" | 8 #include "Test.h" |
9 #include "SkDevice.h" | 9 #include "SkDevice.h" |
10 #include "SkTemplates.h" | 10 #include "SkTemplates.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 rec.fRadius[1], | 119 rec.fRadius[1], |
120 rec.fColors, | 120 rec.fColors, |
121 rec.fPos, | 121 rec.fPos, |
122 rec.fColorCount, | 122 rec.fColorCount, |
123 rec.fTileMode)); | 123 rec.fTileMode)); |
124 | 124 |
125 SkShader::GradientInfo info; | 125 SkShader::GradientInfo info; |
126 rec.gradCheck(reporter, s, &info, SkShader::kConical_GradientType); | 126 rec.gradCheck(reporter, s, &info, SkShader::kConical_GradientType); |
127 REPORTER_ASSERT(reporter, !memcmp(info.fPoint, rec.fPoint, 2 * sizeof(SkPoin
t))); | 127 REPORTER_ASSERT(reporter, !memcmp(info.fPoint, rec.fPoint, 2 * sizeof(SkPoin
t))); |
128 REPORTER_ASSERT(reporter, !memcmp(info.fRadius, rec.fRadius, 2 * sizeof(SkSc
alar))); | 128 REPORTER_ASSERT(reporter, !memcmp(info.fRadius, rec.fRadius, 2 * sizeof(SkSc
alar))); |
| 129 REPORTER_ASSERT(reporter, !s->isOpaque()); |
| 130 } |
| 131 |
| 132 // 2-point radial gradient should behave as opaque when it extends to the entire
plane |
| 133 static void conical_gradproc_opaque(skiatest::Reporter* reporter, const GradRec&
rec) { |
| 134 SkAutoTUnref<SkShader> s(SkGradientShader::CreateTwoPointConical(rec.fPoint[
0], |
| 135 rec.fRadius
[0], |
| 136 rec.fPoint[
0], |
| 137 rec.fRadius
[1], |
| 138 rec.fColors
, |
| 139 rec.fPos, |
| 140 rec.fColorC
ount, |
| 141 rec.fTileMo
de)); |
| 142 REPORTER_ASSERT(reporter, s->isOpaque()); |
| 143 } |
| 144 |
| 145 // 2nd circle center lies on edge of first circle should not be considered opaqu
e |
| 146 static void conical_gradproc_not_opaque(skiatest::Reporter* reporter, const Grad
Rec& rec) { |
| 147 SkScalar dist = SkPoint::Distance(rec.fPoint[0], rec.fPoint[1]); |
| 148 SkAutoTUnref<SkShader> s(SkGradientShader::CreateTwoPointConical(rec.fPoint[
0], |
| 149 dist, |
| 150 rec.fPoint[
1], |
| 151 rec.fRadius
[1], |
| 152 rec.fColors
, |
| 153 rec.fPos, |
| 154 rec.fColorC
ount, |
| 155 rec.fTileMo
de)); |
| 156 REPORTER_ASSERT(reporter, !s->isOpaque()); |
129 } | 157 } |
130 | 158 |
131 // Ensure that repeated color gradients behave like drawing a single color | 159 // Ensure that repeated color gradients behave like drawing a single color |
132 static void TestConstantGradient(skiatest::Reporter*) { | 160 static void TestConstantGradient(skiatest::Reporter*) { |
133 const SkPoint pts[] = { | 161 const SkPoint pts[] = { |
134 { 0, 0 }, | 162 { 0, 0 }, |
135 { SkIntToScalar(10), 0 } | 163 { SkIntToScalar(10), 0 } |
136 }; | 164 }; |
137 SkColor colors[] = { SK_ColorBLUE, SK_ColorBLUE }; | 165 SkColor colors[] = { SK_ColorBLUE, SK_ColorBLUE }; |
138 const SkScalar pos[] = { 0, SK_Scalar1 }; | 166 const SkScalar pos[] = { 0, SK_Scalar1 }; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 rec.fTileMode = SkShader::kClamp_TileMode; | 206 rec.fTileMode = SkShader::kClamp_TileMode; |
179 | 207 |
180 static const GradProc gProcs[] = { | 208 static const GradProc gProcs[] = { |
181 none_gradproc, | 209 none_gradproc, |
182 color_gradproc, | 210 color_gradproc, |
183 linear_gradproc, | 211 linear_gradproc, |
184 radial_gradproc, | 212 radial_gradproc, |
185 radial2_gradproc, | 213 radial2_gradproc, |
186 sweep_gradproc, | 214 sweep_gradproc, |
187 conical_gradproc, | 215 conical_gradproc, |
| 216 conical_gradproc_opaque, |
| 217 conical_gradproc_not_opaque, |
188 }; | 218 }; |
189 | 219 |
190 for (size_t i = 0; i < SK_ARRAY_COUNT(gProcs); ++i) { | 220 for (size_t i = 0; i < SK_ARRAY_COUNT(gProcs); ++i) { |
191 gProcs[i](reporter, rec); | 221 gProcs[i](reporter, rec); |
192 } | 222 } |
193 } | 223 } |
194 | 224 |
195 static void TestGradients(skiatest::Reporter* reporter) { | 225 static void TestGradients(skiatest::Reporter* reporter) { |
196 TestGradientShaders(reporter); | 226 TestGradientShaders(reporter); |
197 TestConstantGradient(reporter); | 227 TestConstantGradient(reporter); |
198 } | 228 } |
199 #include "TestClassDef.h" | 229 #include "TestClassDef.h" |
200 DEFINE_TESTCLASS("Gradients", TestGradientsClass, TestGradients) | 230 DEFINE_TESTCLASS("Gradients", TestGradientsClass, TestGradients) |
OLD | NEW |