diff --git a/impeller/display_list/display_list_unittests.cc b/impeller/display_list/display_list_unittests.cc index f40a75aa10f6a..47cf96ebf720a 100644 --- a/impeller/display_list/display_list_unittests.cc +++ b/impeller/display_list/display_list_unittests.cc @@ -658,6 +658,9 @@ TEST_P(DisplayListTest, CanDrawZeroLengthLine) { TEST_P(DisplayListTest, CanDrawShadow) { flutter::DisplayListBuilder builder; + auto content_scale = GetContentScale() * 0.8; + builder.scale(content_scale.x, content_scale.y); + constexpr size_t star_spikes = 5; constexpr SkScalar half_spike_rotation = kPi / star_spikes; constexpr SkScalar radius = 40; @@ -677,24 +680,24 @@ TEST_P(DisplayListTest, CanDrawShadow) { std::array paths = { SkPath{}.addRect(SkRect::MakeXYWH(0, 0, 200, 100)), SkPath{}.addRRect( - SkRRect::MakeRectXY(SkRect::MakeXYWH(0, 0, 200, 100), 30, 30)), + SkRRect::MakeRectXY(SkRect::MakeXYWH(20, 0, 200, 100), 30, 30)), SkPath{}.addCircle(100, 50, 50), SkPath{}.addPoly(star.data(), star.size(), true), }; builder.setColor(flutter::DlColor::kWhite()); builder.drawPaint(); builder.setColor(flutter::DlColor::kCyan()); - builder.translate(100, 100); + builder.translate(100, 50); for (size_t x = 0; x < paths.size(); x++) { builder.save(); - for (size_t y = 0; y < 5; y++) { - builder.drawShadow(paths[x], flutter::DlColor::kBlack(), 3 + y * 5, false, + for (size_t y = 0; y < 6; y++) { + builder.drawShadow(paths[x], flutter::DlColor::kBlack(), 3 + y * 8, false, 1); builder.drawPath(paths[x]); - builder.translate(0, 200); + builder.translate(0, 150); } builder.restore(); - builder.translate(300, 0); + builder.translate(250, 0); } ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); diff --git a/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc b/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc index d50ca50642c0b..782615cca274e 100644 --- a/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc +++ b/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc @@ -228,8 +228,11 @@ std::optional DirectionalGaussianBlurFilterContents::RenderFilter( Vector2 scale; auto scale_curve = [](Scalar radius) { - const Scalar d = 4.0; - return std::min(1.0, d / (std::max(1.0f, radius) + d - 1.0)); + constexpr Scalar decay = 4.0; // Larger is more gradual. + constexpr Scalar limit = 0.95; // The maximum percentage of the scaledown. + const Scalar curve = + std::min(1.0, decay / (std::max(1.0f, radius) + decay - 1.0)); + return (curve - 1) * limit + 1; }; { scale.x = scale_curve(transformed_blur_radius_length);