25 #if IMPELLER_ENABLE_3D
28 #endif // IMPELLER_ENABLE_3D
34 auto contents = std::make_shared<SolidColorContents>();
35 contents->SetColor(paint.color);
47 std::vector<Color> colors,
48 std::vector<Scalar> stops,
53 result.proc_ = [start_point, end_point, colors = std::move(colors),
54 stops = std::move(stops), tile_mode,
55 effect_transform](
const Paint& paint) {
56 auto contents = std::make_shared<LinearGradientContents>();
57 contents->SetOpacityFactor(paint.color.alpha);
58 contents->SetColors(colors);
59 contents->SetStops(stops);
60 contents->SetEndPoints(start_point, end_point);
61 contents->SetTileMode(tile_mode);
62 contents->SetEffectTransform(effect_transform);
64 std::vector<Point> bounds{start_point, end_point};
66 if (intrinsic_size.has_value()) {
67 contents->SetColorSourceSize(intrinsic_size->GetSize());
76 std::vector<Color> colors,
77 std::vector<Scalar> stops,
84 result.proc_ = [center, radius, colors = std::move(colors),
85 stops = std::move(stops), focus_center, focus_radius,
86 tile_mode, effect_transform](
const Paint& paint) {
87 std::shared_ptr<ConicalGradientContents> contents =
88 std::make_shared<ConicalGradientContents>();
89 contents->SetOpacityFactor(paint.color.alpha);
90 contents->SetColors(colors);
91 contents->SetStops(stops);
92 contents->SetCenterAndRadius(center, radius);
93 contents->SetTileMode(tile_mode);
94 contents->SetEffectTransform(effect_transform);
95 contents->SetFocus(focus_center, focus_radius);
97 auto radius_pt =
Point(radius, radius);
98 std::vector<Point> bounds{center + radius_pt, center - radius_pt};
100 if (intrinsic_size.has_value()) {
101 contents->SetColorSourceSize(intrinsic_size->GetSize());
110 std::vector<Color> colors,
111 std::vector<Scalar> stops,
113 Matrix effect_transform) {
116 result.proc_ = [center, radius, colors = std::move(colors),
117 stops = std::move(stops), tile_mode,
118 effect_transform](
const Paint& paint) {
119 auto contents = std::make_shared<RadialGradientContents>();
120 contents->SetOpacityFactor(paint.color.alpha);
121 contents->SetColors(colors);
122 contents->SetStops(stops);
123 contents->SetCenterAndRadius(center, radius);
124 contents->SetTileMode(tile_mode);
125 contents->SetEffectTransform(effect_transform);
127 auto radius_pt =
Point(radius, radius);
128 std::vector<Point> bounds{center + radius_pt, center - radius_pt};
130 if (intrinsic_size.has_value()) {
131 contents->SetColorSourceSize(intrinsic_size->GetSize());
141 std::vector<Color> colors,
142 std::vector<Scalar> stops,
144 Matrix effect_transform) {
147 result.proc_ = [center, start_angle, end_angle, colors = std::move(colors),
148 stops = std::move(stops), tile_mode,
149 effect_transform](
const Paint& paint) {
150 auto contents = std::make_shared<SweepGradientContents>();
151 contents->SetOpacityFactor(paint.color.alpha);
152 contents->SetCenterAndAngles(center, start_angle, end_angle);
153 contents->SetColors(colors);
154 contents->SetStops(stops);
155 contents->SetTileMode(tile_mode);
156 contents->SetEffectTransform(effect_transform);
167 Matrix effect_transform) {
170 result.proc_ = [texture = std::move(texture), x_tile_mode, y_tile_mode,
171 sampler_descriptor = std::move(sampler_descriptor),
172 effect_transform](
const Paint& paint) {
173 auto contents = std::make_shared<TiledTextureContents>();
174 contents->SetOpacityFactor(paint.color.alpha);
175 contents->SetTexture(texture);
176 contents->SetTileModes(x_tile_mode, y_tile_mode);
177 contents->SetSamplerDescriptor(sampler_descriptor);
178 contents->SetEffectTransform(effect_transform);
179 if (paint.color_filter) {
182 return color_filter->WrapWithGPUColorFilter(
185 contents->SetColorFilter(filter_proc);
187 contents->SetColorSourceSize(
Size::Ceil(texture->GetSize()));
194 std::shared_ptr<RuntimeStage> runtime_stage,
195 std::shared_ptr<std::vector<uint8_t>> uniform_data,
196 std::vector<RuntimeEffectContents::TextureInput> texture_inputs) {
199 result.proc_ = [runtime_stage = std::move(runtime_stage),
200 uniform_data = std::move(uniform_data),
202 std::move(texture_inputs)](
const Paint& paint) {
203 auto contents = std::make_shared<RuntimeEffectContents>();
204 contents->SetOpacityFactor(paint.color.alpha);
205 contents->SetRuntimeStage(runtime_stage);
206 contents->SetUniformData(uniform_data);
207 contents->SetTextureInputs(texture_inputs);
213 #if IMPELLER_ENABLE_3D
214 ColorSource ColorSource::MakeScene(std::shared_ptr<scene::Node> scene_node,
215 Matrix camera_transform) {
218 result.proc_ = [scene_node = std::move(scene_node),
219 camera_transform](
const Paint& paint) {
220 auto contents = std::make_shared<SceneContents>();
221 contents->SetOpacityFactor(paint.color.alpha);
222 contents->SetNode(scene_node);
223 contents->SetCameraTransform(camera_transform);
228 #endif // IMPELLER_ENABLE_3D
235 const Paint& paint)
const {