64 auto contents = std::make_shared<SolidColorContents>();
65 contents->SetColor(
color);
76 std::vector<Color> colors;
77 std::vector<float> stops;
81 auto effect_transform = linear->
matrix();
83 auto contents = std::make_shared<LinearGradientContents>();
85 contents->SetColors(std::move(colors));
86 contents->SetStops(std::move(stops));
87 contents->SetEndPoints(start_point, end_point);
88 contents->SetTileMode(tile_mode);
89 contents->SetEffectTransform(effect_transform);
91 std::array<Point, 2> bounds{start_point, end_point};
93 if (intrinsic_size.has_value()) {
94 contents->SetColorSourceSize(intrinsic_size->GetSize().Max({1, 1}));
102 auto center = radialGradient->
center();
103 auto radius = radialGradient->
radius();
104 std::vector<Color> colors;
105 std::vector<float> stops;
110 auto effect_transform = radialGradient->
matrix();
112 auto contents = std::make_shared<RadialGradientContents>();
114 contents->SetColors(std::move(colors));
115 contents->SetStops(std::move(stops));
116 contents->SetCenterAndRadius(center, radius);
117 contents->SetTileMode(tile_mode);
118 contents->SetEffectTransform(effect_transform);
120 auto radius_pt =
Point(radius, radius);
121 std::array<Point, 2> bounds{center + radius_pt, center - radius_pt};
123 if (intrinsic_size.has_value()) {
124 contents->SetColorSourceSize(intrinsic_size->GetSize().Max({1, 1}));
136 std::vector<Color> colors;
137 std::vector<float> stops;
142 auto effect_transform = conical_gradient->
matrix();
144 std::shared_ptr<ConicalGradientContents> contents =
145 std::make_shared<ConicalGradientContents>();
147 contents->SetColors(std::move(colors));
148 contents->SetStops(std::move(stops));
149 contents->SetCenterAndRadius(center, radius);
150 contents->SetTileMode(tile_mode);
151 contents->SetEffectTransform(effect_transform);
152 contents->SetFocus(focus_center, focus_radius);
154 auto radius_pt =
Point(radius, radius);
155 std::array<Point, 2> bounds{center + radius_pt, center - radius_pt};
157 if (intrinsic_size.has_value()) {
158 contents->SetColorSourceSize(intrinsic_size->GetSize().Max({1, 1}));
167 auto center = sweepGradient->
center();
169 auto end_angle =
Degrees(sweepGradient->
end());
170 std::vector<Color> colors;
171 std::vector<float> stops;
176 auto effect_transform = sweepGradient->
matrix();
178 auto contents = std::make_shared<SweepGradientContents>();
180 contents->SetCenterAndAngles(center, start_angle, end_angle);
181 contents->SetColors(std::move(colors));
182 contents->SetStops(std::move(stops));
183 contents->SetTileMode(tile_mode);
184 contents->SetEffectTransform(effect_transform);
192 image_color_source->
image()->impeller_texture());
193 auto texture = image_color_source->
image()->impeller_texture();
198 auto sampler_descriptor =
203 auto contents = std::make_shared<TiledTextureContents>();
206 contents->SetTileModes(x_tile_mode, y_tile_mode);
207 contents->SetSamplerDescriptor(sampler_descriptor);
208 contents->SetEffectTransform(effect_transform);
214 std::shared_ptr<FilterContents> color_filter_output =
230 contents->SetColorFilter(filter_proc);
240 auto uniform_data = runtime_effect_color_source->
uniform_data();
241 auto samplers = runtime_effect_color_source->
samplers();
243 std::vector<RuntimeEffectContents::TextureInput> texture_inputs;
245 for (
auto& sampler : samplers) {
246 if (sampler ==
nullptr) {
248 auto contents = std::make_shared<SolidColorContents>();
252 auto*
image = sampler->asImage();
253 if (!sampler->asImage()) {
255 auto contents = std::make_shared<SolidColorContents>();
260 texture_inputs.push_back({
261 .sampler_descriptor =
263 .texture =
image->
image()->impeller_texture(),
267 auto contents = std::make_shared<RuntimeEffectContents>();
269 contents->SetRuntimeStage(std::move(runtime_stage));
270 contents->SetUniformData(std::move(uniform_data));
271 contents->SetTextureInputs(std::move(texture_inputs));
365std::shared_ptr<FilterContents> Paint::MaskBlurDescriptor::CreateMaskBlur(
366 std::shared_ptr<TextureContents> texture_contents,
368 Scalar expand_amount = GaussianBlurFilterContents::CalculateBlurRadius(
369 GaussianBlurFilterContents::ScaleSigma(sigma.sigma));
370 texture_contents->SetSourceRect(
371 texture_contents->GetSourceRect().Expand(expand_amount, expand_amount));
372 auto mask = std::make_shared<SolidColorContents>();
373 mask->SetColor(Color::White());
374 std::optional<Rect> coverage = texture_contents->GetCoverage({});
377 texture_contents->SetDestinationRect(
378 coverage.value().Expand(expand_amount, expand_amount));
380 geometry = rect_geom;
382 mask->SetGeometry(geometry);
383 auto descriptor = texture_contents->GetSamplerDescriptor();
384 texture_contents->SetSamplerDescriptor(descriptor);
385 std::shared_ptr<FilterContents> blurred_mask =
386 FilterContents::MakeGaussianBlur(FilterInput::Make(mask), sigma, sigma,
387 Entity::TileMode::kDecal, style,
390 return ColorFilterContents::MakeBlend(
392 {FilterInput::Make(blurred_mask), FilterInput::Make(texture_contents)});
395std::shared_ptr<FilterContents> Paint::MaskBlurDescriptor::CreateMaskBlur(
396 std::shared_ptr<ColorSourceContents> color_source_contents,
402 if (color_source_contents->IsSolidColor()) {
403 return FilterContents::MakeGaussianBlur(
404 FilterInput::Make(color_source_contents), sigma, sigma,
405 Entity::TileMode::kDecal, style, color_source_contents->GetGeometry());
410 auto mask = std::make_shared<SolidColorContents>();
411 mask->SetColor(Color::White());
412 mask->SetGeometry(color_source_contents->GetGeometry());
416 auto blurred_mask = FilterContents::MakeGaussianBlur(
417 FilterInput::Make(mask), sigma, sigma, Entity::TileMode::kDecal, style,
418 color_source_contents->GetGeometry());
424 auto expanded_local_bounds = blurred_mask->GetCoverage({});
425 if (!expanded_local_bounds.has_value()) {
426 expanded_local_bounds =
Rect();
429 color_source_contents->SetGeometry(rect_geom);
430 std::shared_ptr<Contents> color_contents = color_source_contents;
436 ColorFilterContents::AbsorbOpacity::kYes);
441 ColorFilterContents::AbsorbOpacity::kYes);
446 return ColorFilterContents::MakeBlend(
448 {FilterInput::Make(blurred_mask), FilterInput::Make(color_contents)});
std::function< std::shared_ptr< ColorFilterContents >(FilterInput::Ref)> ColorFilterProc