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

Commit 1aff447

Browse files
committed
asserted and fixed blur styles
1 parent a2d9ab2 commit 1aff447

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

impeller/display_list/aiks_dl_blur_unittests.cc

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ TEST_P(AiksTest, SolidColorOvalsMaskBlurTinySigma) {
6161
}
6262

6363
sk_sp<flutter::DisplayList> DoGradientOvalStrokeMaskBlur(Vector2 content_Scale,
64-
Scalar sigma) {
64+
Scalar sigma,
65+
DlBlurStyle style) {
6566
DisplayListBuilder builder;
6667
builder.Scale(content_Scale.x, content_Scale.y);
6768

@@ -73,7 +74,7 @@ sk_sp<flutter::DisplayList> DoGradientOvalStrokeMaskBlur(Vector2 content_Scale,
7374
std::vector<Scalar> stops = {0.0, 1.0};
7475

7576
DlPaint paint;
76-
paint.setMaskFilter(DlBlurMaskFilter::Make(DlBlurStyle::kNormal, sigma));
77+
paint.setMaskFilter(DlBlurMaskFilter::Make(style, sigma));
7778
auto gradient = DlColorSource::MakeLinear(
7879
{0, 0}, {200, 200}, 2, colors.data(), stops.data(), DlTileMode::kClamp);
7980
paint.setColorSource(gradient);
@@ -99,14 +100,30 @@ sk_sp<flutter::DisplayList> DoGradientOvalStrokeMaskBlur(Vector2 content_Scale,
99100
return builder.Build();
100101
}
101102

103+
// https://github.com/flutter/flutter/issues/155930
104+
TEST_P(AiksTest, GradientOvalStrokeMaskBlur) {
105+
ASSERT_TRUE(OpenPlaygroundHere(DoGradientOvalStrokeMaskBlur(
106+
GetContentScale(), /*sigma=*/10, DlBlurStyle::kNormal)));
107+
}
108+
102109
TEST_P(AiksTest, GradientOvalStrokeMaskBlurSigmaZero) {
103-
ASSERT_TRUE(OpenPlaygroundHere(
104-
DoGradientOvalStrokeMaskBlur(GetContentScale(), /*sigma=*/0)));
110+
ASSERT_TRUE(OpenPlaygroundHere(DoGradientOvalStrokeMaskBlur(
111+
GetContentScale(), /*sigma=*/0, DlBlurStyle::kNormal)));
105112
}
106113

107-
TEST_P(AiksTest, GradientOvalStrokeMaskBlur) {
108-
ASSERT_TRUE(OpenPlaygroundHere(
109-
DoGradientOvalStrokeMaskBlur(GetContentScale(), /*sigma=*/10)));
114+
TEST_P(AiksTest, GradientOvalStrokeMaskBlurOuter) {
115+
ASSERT_TRUE(OpenPlaygroundHere(DoGradientOvalStrokeMaskBlur(
116+
GetContentScale(), /*sigma=*/10, DlBlurStyle::kOuter)));
117+
}
118+
119+
TEST_P(AiksTest, GradientOvalStrokeMaskBlurInner) {
120+
ASSERT_TRUE(OpenPlaygroundHere(DoGradientOvalStrokeMaskBlur(
121+
GetContentScale(), /*sigma=*/10, DlBlurStyle::kInner)));
122+
}
123+
124+
TEST_P(AiksTest, GradientOvalStrokeMaskBlurSolid) {
125+
ASSERT_TRUE(OpenPlaygroundHere(DoGradientOvalStrokeMaskBlur(
126+
GetContentScale(), /*sigma=*/10, DlBlurStyle::kSolid)));
110127
}
111128

112129
TEST_P(AiksTest, SolidColorCircleMaskBlurTinySigma) {

impeller/entity/contents/filters/gaussian_blur_filter_contents.cc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,8 @@ Entity ApplyBlurStyle(FilterContents::BlurStyle blur_style,
551551
const Snapshot& input_snapshot,
552552
Entity blur_entity,
553553
const Geometry* geometry,
554-
Vector2 source_space_scalar) {
554+
Vector2 source_space_scalar,
555+
Vector2 source_space_offset) {
555556
switch (blur_style) {
556557
case FilterContents::BlurStyle::kNormal:
557558
return blur_entity;
@@ -569,9 +570,11 @@ Entity ApplyBlurStyle(FilterContents::BlurStyle blur_style,
569570
Entity::FromSnapshot(input_snapshot, entity.GetBlendMode());
570571
Entity result;
571572
Matrix blurred_transform = blur_entity.GetTransform();
572-
Matrix snapshot_transform = entity.GetTransform() * //
573-
Matrix::MakeScale(1.f / source_space_scalar) *
574-
input_snapshot.transform;
573+
Matrix snapshot_transform =
574+
entity.GetTransform() * //
575+
Matrix::MakeScale(1.f / source_space_scalar) *
576+
Matrix::MakeTranslation(-1 * source_space_offset) *
577+
input_snapshot.transform;
575578
result.SetContents(Contents::MakeAnonymous(
576579
fml::MakeCopyable([blur_entity = blur_entity.Clone(),
577580
blurred_transform, snapshot_transform,
@@ -845,7 +848,8 @@ std::optional<Entity> GaussianBlurFilterContents::RenderFilter(
845848

846849
return ApplyBlurStyle(mask_blur_style_, entity, inputs[0],
847850
input_snapshot.value(), std::move(blur_output_entity),
848-
mask_geometry_, blur_info.source_space_scalar);
851+
mask_geometry_, blur_info.source_space_scalar,
852+
blur_info.source_space_offset);
849853
}
850854

851855
Scalar GaussianBlurFilterContents::CalculateBlurRadius(Scalar sigma) {

0 commit comments

Comments
 (0)