@@ -94,13 +94,20 @@ TEST(DisplayListColorSource, FromSkiaNullShader) {
94
94
}
95
95
96
96
TEST (DisplayListColorSource, FromSkiaColorShader) {
97
+ // We cannot read back the matrix parameter from a Skia LinearGradient
98
+ // so we conservatively use an UnknownColorSource wrapper so as to not
99
+ // lose any data. Note that the Skia Color shader end is read back from
100
+ // the Skia asAGradient() method so while this type of color source
101
+ // does not really need the matrix, we represent all of the gradient
102
+ // sources using an unknown source.
103
+ // Note that this shader should never really happen in practice as it
104
+ // represents a degenerate gradient that collapsed to a single color.
97
105
sk_sp<SkShader> shader = SkShaders::Color (SK_ColorBLUE);
98
106
std::shared_ptr<DlColorSource> source = DlColorSource::From (shader);
99
- DlColorColorSource dl_source (SK_ColorBLUE);
100
- ASSERT_EQ (source->type (), DlColorSourceType::kColor );
101
- ASSERT_EQ (*source->asColor (), dl_source);
102
- ASSERT_EQ (source->asColor ()->color (), SK_ColorBLUE);
107
+ ASSERT_EQ (source->type (), DlColorSourceType::kUnknown );
108
+ ASSERT_EQ (source->skia_object (), shader);
103
109
110
+ ASSERT_EQ (source->asColor (), nullptr );
104
111
ASSERT_EQ (source->asImage (), nullptr );
105
112
ASSERT_EQ (source->asLinearGradient (), nullptr );
106
113
ASSERT_EQ (source->asRadialGradient (), nullptr );
@@ -131,126 +138,78 @@ TEST(DisplayListColorSource, FromSkiaImageShader) {
131
138
}
132
139
133
140
TEST (DisplayListColorSource, FromSkiaLinearGradient) {
134
- // We can read back all of the parameters of a Linear gradient
135
- // except for matrix.
141
+ // We cannot read back the matrix parameter from a Skia LinearGradient
142
+ // so we conservatively use an UnknownColorSource wrapper so as to not
143
+ // lose any data.
136
144
sk_sp<SkShader> shader = SkGradientShader::MakeLinear (
137
145
TestPoints, TestColors, TestStops, kTestStopCount , SkTileMode::kClamp );
138
146
std::shared_ptr<DlColorSource> source = DlColorSource::From (shader);
139
- std::shared_ptr<DlColorSource> dl_source =
140
- DlColorSource::MakeLinear (TestPoints[0 ], TestPoints[1 ], kTestStopCount ,
141
- TestColors, TestStops, DlTileMode::kClamp );
142
- ASSERT_EQ (source->type (), DlColorSourceType::kLinearGradient );
143
- EXPECT_TRUE (*source->asLinearGradient () == *dl_source->asLinearGradient ());
144
- ASSERT_EQ (*source->asLinearGradient (), *dl_source->asLinearGradient ());
145
- ASSERT_EQ (source->asLinearGradient ()->start_point (), TestPoints[0 ]);
146
- ASSERT_EQ (source->asLinearGradient ()->end_point (), TestPoints[1 ]);
147
- ASSERT_EQ (source->asLinearGradient ()->stop_count (), kTestStopCount );
148
- for (int i = 0 ; i < kTestStopCount ; i++) {
149
- ASSERT_EQ (source->asLinearGradient ()->colors ()[i], TestColors[i]);
150
- ASSERT_EQ (source->asLinearGradient ()->stops ()[i], TestStops[i]);
151
- }
152
- ASSERT_EQ (source->asLinearGradient ()->tile_mode (), DlTileMode::kClamp );
153
- ASSERT_EQ (source->asLinearGradient ()->matrix (), SkMatrix::I ());
147
+ ASSERT_EQ (source->type (), DlColorSourceType::kUnknown );
148
+ ASSERT_EQ (source->skia_object (), shader);
154
149
155
150
ASSERT_EQ (source->asColor (), nullptr );
156
151
ASSERT_EQ (source->asImage (), nullptr );
152
+ ASSERT_EQ (source->asLinearGradient (), nullptr );
157
153
ASSERT_EQ (source->asRadialGradient (), nullptr );
158
154
ASSERT_EQ (source->asConicalGradient (), nullptr );
159
155
ASSERT_EQ (source->asSweepGradient (), nullptr );
160
156
}
161
157
162
158
TEST (DisplayListColorSource, FromSkiaRadialGradient) {
163
- // We can read back all of the parameters of a Radial gradient
164
- // except for matrix.
159
+ // We cannot read back the matrix parameter from a Skia RadialGradient
160
+ // so we conservatively use an UnknownColorSource wrapper so as to not
161
+ // lose any data.
165
162
sk_sp<SkShader> shader =
166
163
SkGradientShader::MakeRadial (TestPoints[0 ], 10.0 , TestColors, TestStops,
167
164
kTestStopCount , SkTileMode::kClamp );
168
165
std::shared_ptr<DlColorSource> source = DlColorSource::From (shader);
169
- std::shared_ptr<DlColorSource> dl_source =
170
- DlColorSource::MakeRadial (TestPoints[0 ], 10.0 , kTestStopCount , TestColors,
171
- TestStops, DlTileMode::kClamp );
172
- ASSERT_EQ (source->type (), DlColorSourceType::kRadialGradient );
173
- EXPECT_TRUE (*source->asRadialGradient () == *dl_source->asRadialGradient ());
174
- ASSERT_EQ (*source->asRadialGradient (), *dl_source->asRadialGradient ());
175
- ASSERT_EQ (source->asRadialGradient ()->center (), TestPoints[0 ]);
176
- ASSERT_EQ (source->asRadialGradient ()->radius (), 10.0 );
177
- ASSERT_EQ (source->asRadialGradient ()->stop_count (), kTestStopCount );
178
- for (int i = 0 ; i < kTestStopCount ; i++) {
179
- ASSERT_EQ (source->asRadialGradient ()->colors ()[i], TestColors[i]);
180
- ASSERT_EQ (source->asRadialGradient ()->stops ()[i], TestStops[i]);
181
- }
182
- ASSERT_EQ (source->asRadialGradient ()->tile_mode (), DlTileMode::kClamp );
183
- ASSERT_EQ (source->asRadialGradient ()->matrix (), SkMatrix::I ());
166
+ ASSERT_EQ (source->type (), DlColorSourceType::kUnknown );
167
+ ASSERT_EQ (source->skia_object (), shader);
184
168
185
169
ASSERT_EQ (source->asColor (), nullptr );
186
170
ASSERT_EQ (source->asImage (), nullptr );
187
171
ASSERT_EQ (source->asLinearGradient (), nullptr );
172
+ ASSERT_EQ (source->asRadialGradient (), nullptr );
188
173
ASSERT_EQ (source->asConicalGradient (), nullptr );
189
174
ASSERT_EQ (source->asSweepGradient (), nullptr );
190
175
}
191
176
192
177
TEST (DisplayListColorSource, FromSkiaConicalGradient) {
193
- // We can read back all of the parameters of a Conical gradient
194
- // except for matrix.
178
+ // We cannot read back the matrix parameter from a Skia ConicalGradient
179
+ // so we conservatively use an UnknownColorSource wrapper so as to not
180
+ // lose any data.
195
181
sk_sp<SkShader> shader = SkGradientShader::MakeTwoPointConical (
196
182
TestPoints[0 ], 10.0 , TestPoints[1 ], 20.0 , TestColors, TestStops,
197
183
kTestStopCount , SkTileMode::kClamp );
198
184
std::shared_ptr<DlColorSource> source = DlColorSource::From (shader);
199
- std::shared_ptr<DlColorSource> dl_source = DlColorSource::MakeConical (
200
- TestPoints[0 ], 10.0 , TestPoints[1 ], 20.0 , kTestStopCount , TestColors,
201
- TestStops, DlTileMode::kClamp );
202
- ASSERT_EQ (source->type (), DlColorSourceType::kConicalGradient );
203
- EXPECT_TRUE (*source->asConicalGradient () == *dl_source->asConicalGradient ());
204
- ASSERT_EQ (*source->asConicalGradient (), *dl_source->asConicalGradient ());
205
- ASSERT_EQ (source->asConicalGradient ()->start_center (), TestPoints[0 ]);
206
- ASSERT_EQ (source->asConicalGradient ()->start_radius (), 10.0 );
207
- ASSERT_EQ (source->asConicalGradient ()->end_center (), TestPoints[1 ]);
208
- ASSERT_EQ (source->asConicalGradient ()->end_radius (), 20.0 );
209
- ASSERT_EQ (source->asConicalGradient ()->stop_count (), kTestStopCount );
210
- for (int i = 0 ; i < kTestStopCount ; i++) {
211
- ASSERT_EQ (source->asConicalGradient ()->colors ()[i], TestColors[i]);
212
- ASSERT_EQ (source->asConicalGradient ()->stops ()[i], TestStops[i]);
213
- }
214
- ASSERT_EQ (source->asConicalGradient ()->tile_mode (), DlTileMode::kClamp );
215
- ASSERT_EQ (source->asConicalGradient ()->matrix (), SkMatrix::I ());
185
+ ASSERT_EQ (source->type (), DlColorSourceType::kUnknown );
186
+ ASSERT_EQ (source->skia_object (), shader);
216
187
217
188
ASSERT_EQ (source->asColor (), nullptr );
218
189
ASSERT_EQ (source->asImage (), nullptr );
219
190
ASSERT_EQ (source->asLinearGradient (), nullptr );
220
191
ASSERT_EQ (source->asRadialGradient (), nullptr );
192
+ ASSERT_EQ (source->asConicalGradient (), nullptr );
221
193
ASSERT_EQ (source->asSweepGradient (), nullptr );
222
194
}
223
195
224
196
TEST (DisplayListColorSource, FromSkiaSweepGradient) {
225
- // We can read back all of the parameters of a Sweep gradient
226
- // except for matrix and the start/stop angles.
227
- sk_sp<SkShader> shader =
228
- SkGradientShader::MakeSweep (TestPoints[0 ].fX , TestPoints[0 ].fY ,
229
- TestColors, TestStops, kTestStopCount );
197
+ // We cannot read back the matrix parameter, nor the sweep parameters from a
198
+ // Skia SweepGradient so we conservatively use an UnknownColorSource wrapper
199
+ // so as to not lose any data.
200
+ const SkColor* sk_colors = reinterpret_cast <const SkColor*>(TestColors);
201
+ sk_sp<SkShader> shader = SkGradientShader::MakeSweep (
202
+ TestPoints[0 ].fX , TestPoints[0 ].fY , sk_colors, TestStops, kTestStopCount );
230
203
std::shared_ptr<DlColorSource> source = DlColorSource::From (shader);
231
- std::shared_ptr<DlColorSource> dl_source =
232
- DlColorSource::MakeSweep (TestPoints[0 ], 0 , 360 , kTestStopCount ,
233
- TestColors, TestStops, DlTileMode::kClamp );
234
- ASSERT_EQ (source->type (), DlColorSourceType::kSweepGradient );
235
- EXPECT_TRUE (*source->asSweepGradient () == *dl_source->asSweepGradient ());
236
- ASSERT_EQ (*source->asSweepGradient (), *dl_source->asSweepGradient ());
237
- ASSERT_EQ (source->asSweepGradient ()->center (), TestPoints[0 ]);
238
- ASSERT_EQ (source->asSweepGradient ()->start (), 0 );
239
- ASSERT_EQ (source->asSweepGradient ()->end (), 360 );
240
- ASSERT_EQ (source->asSweepGradient ()->stop_count (), kTestStopCount );
241
- for (int i = 0 ; i < kTestStopCount ; i++) {
242
- ASSERT_EQ (source->asSweepGradient ()->colors ()[i], TestColors[i]);
243
- ASSERT_EQ (source->asSweepGradient ()->stops ()[i], TestStops[i]);
244
- }
245
- ASSERT_EQ (source->asSweepGradient ()->tile_mode (), DlTileMode::kClamp );
246
- ASSERT_EQ (source->asSweepGradient ()->matrix (), SkMatrix::I ());
204
+ ASSERT_EQ (source->type (), DlColorSourceType::kUnknown );
205
+ ASSERT_EQ (source->skia_object (), shader);
247
206
248
207
ASSERT_EQ (source->asColor (), nullptr );
249
208
ASSERT_EQ (source->asImage (), nullptr );
250
209
ASSERT_EQ (source->asLinearGradient (), nullptr );
251
210
ASSERT_EQ (source->asRadialGradient (), nullptr );
252
211
ASSERT_EQ (source->asConicalGradient (), nullptr );
253
- ASSERT_NE (source->asSweepGradient (), nullptr );
212
+ ASSERT_EQ (source->asSweepGradient (), nullptr );
254
213
}
255
214
256
215
TEST (DisplayListColorSource, FromSkiaUnrecognizedShader) {
0 commit comments