Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 11fe7e0

Browse files
authored
Use factory in display list for mask filter (#33654)
1 parent 436f18b commit 11fe7e0

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

impeller/aiks/paint.cc

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,9 @@ std::shared_ptr<Contents> Paint::WithFilters(
4343
std::optional<bool> is_solid_color) const {
4444
bool is_solid_color_val = is_solid_color.value_or(!contents);
4545

46-
if (mask_blur.has_value()) {
47-
if (is_solid_color_val) {
48-
input = FilterContents::MakeGaussianBlur(
49-
FilterInput::Make(input), mask_blur->sigma, mask_blur->sigma,
50-
mask_blur->blur_style);
51-
} else {
52-
input = FilterContents::MakeBorderMaskBlur(
53-
FilterInput::Make(input), mask_blur->sigma, mask_blur->sigma,
54-
mask_blur->blur_style);
55-
}
46+
if (mask_filter.has_value()) {
47+
const MaskFilterProc& filter = mask_filter.value();
48+
input = filter(FilterInput::Make(input), is_solid_color_val);
5649
}
5750

5851
return input;

impeller/aiks/paint.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616

1717
namespace impeller {
1818

19-
struct MaskBlur {
20-
FilterContents::BlurStyle blur_style;
21-
FilterContents::Sigma sigma;
22-
};
23-
2419
struct Paint {
20+
using MaskFilterProc =
21+
std::function<std::shared_ptr<FilterContents>(FilterInput::Ref,
22+
bool is_solid_color)>;
23+
2524
enum class Style {
2625
kFill,
2726
kStroke,
@@ -36,7 +35,8 @@ struct Paint {
3635
Scalar stroke_miter = 4.0;
3736
Style style = Style::kFill;
3837
Entity::BlendMode blend_mode = Entity::BlendMode::kSourceOver;
39-
std::optional<MaskBlur> mask_blur;
38+
39+
std::optional<MaskFilterProc> mask_filter;
4040

4141
/// @brief Wrap this paint's configured filters to the given contents.
4242
/// @param[in] input The contents to wrap with paint's filters.

impeller/display_list/display_list_dispatcher.cc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,14 +276,23 @@ static FilterContents::BlurStyle ToBlurStyle(SkBlurStyle blur_style) {
276276
void DisplayListDispatcher::setMaskFilter(const flutter::DlMaskFilter* filter) {
277277
// Needs https://github.com/flutter/flutter/issues/95434
278278
if (filter == nullptr) {
279-
paint_.mask_blur = std::nullopt;
279+
paint_.mask_filter = std::nullopt;
280280
return;
281281
}
282282
switch (filter->type()) {
283283
case flutter::DlMaskFilterType::kBlur: {
284284
auto blur = filter->asBlur();
285-
paint_.mask_blur = {.blur_style = ToBlurStyle(blur->style()),
286-
.sigma = FilterContents::Sigma(blur->sigma())};
285+
286+
auto style = ToBlurStyle(blur->style());
287+
auto sigma = FilterContents::Sigma(blur->sigma());
288+
289+
paint_.mask_filter = [style, sigma](FilterInput::Ref input,
290+
bool is_solid_color) {
291+
if (is_solid_color) {
292+
return FilterContents::MakeGaussianBlur(input, sigma, sigma, style);
293+
}
294+
return FilterContents::MakeBorderMaskBlur(input, sigma, sigma, style);
295+
};
287296
break;
288297
}
289298
case flutter::DlMaskFilterType::kUnknown:

0 commit comments

Comments
 (0)