diff --git a/engine/src/flutter/impeller/display_list/aiks_dl_path_unittests.cc b/engine/src/flutter/impeller/display_list/aiks_dl_path_unittests.cc index 75308f3c011..f3bfa682ed7 100644 --- a/engine/src/flutter/impeller/display_list/aiks_dl_path_unittests.cc +++ b/engine/src/flutter/impeller/display_list/aiks_dl_path_unittests.cc @@ -1076,5 +1076,18 @@ TEST_P(AiksTest, StrokeCapsAndJoins) { ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); } +TEST_P(AiksTest, BlurredCircleWithStrokeWidth) { + DisplayListBuilder builder; + DlPaint paint; + paint.setColor(DlColor::kGreen()); + paint.setDrawStyle(DlDrawStyle::kStroke); + paint.setStrokeWidth(30); + paint.setMaskFilter(DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 5)); + + builder.DrawCircle(DlPoint(200, 200), 100, paint); + + ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); +} + } // namespace testing } // namespace impeller diff --git a/engine/src/flutter/impeller/entity/geometry/circle_geometry.cc b/engine/src/flutter/impeller/entity/geometry/circle_geometry.cc index 8565f0f0d8c..c7f6640c4e8 100644 --- a/engine/src/flutter/impeller/entity/geometry/circle_geometry.cc +++ b/engine/src/flutter/impeller/entity/geometry/circle_geometry.cc @@ -55,11 +55,13 @@ GeometryResult CircleGeometry::GetPositionBuffer(const ContentContext& renderer, } std::optional CircleGeometry::GetCoverage(const Matrix& transform) const { + Scalar half_width = stroke_width_ < 0 ? 0.0 : stroke_width_ * 0.5f; + Scalar outer_radius = radius_ + half_width; Point corners[4]{ - {center_.x, center_.y - radius_}, - {center_.x + radius_, center_.y}, - {center_.x, center_.y + radius_}, - {center_.x - radius_, center_.y}, + {center_.x, center_.y - outer_radius}, + {center_.x + outer_radius, center_.y}, + {center_.x, center_.y + outer_radius}, + {center_.x - outer_radius, center_.y}, }; for (int i = 0; i < 4; i++) {