diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc index 9696cdea6b207..5f110b9471577 100644 --- a/impeller/aiks/aiks_unittests.cc +++ b/impeller/aiks/aiks_unittests.cc @@ -1289,6 +1289,28 @@ TEST_P(AiksTest, CanDrawAnOpenPath) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } +TEST_P(AiksTest, CanDrawAnOpenPathThatIsntARect) { + Canvas canvas; + + // Draw a stroked path that is explicitly closed to verify + // It doesn't become a rectangle. + PathBuilder builder; + builder.MoveTo({50, 50}); + builder.LineTo({520, 120}); + builder.LineTo({300, 310}); + builder.LineTo({100, 50}); + builder.Close(); + + Paint paint; + paint.color = Color::Red(); + paint.style = Paint::Style::kStroke; + paint.stroke_width = 10; + + canvas.DrawPath(builder.TakePath(), paint); + + ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); +} + static sk_sp OpenFixtureAsSkData(const char* fixture_name) { auto mapping = flutter::testing::OpenFixtureAsMapping(fixture_name); if (!mapping) { diff --git a/impeller/display_list/dl_dispatcher.cc b/impeller/display_list/dl_dispatcher.cc index f352a18b05b85..3f1601ae1b080 100644 --- a/impeller/display_list/dl_dispatcher.cc +++ b/impeller/display_list/dl_dispatcher.cc @@ -852,7 +852,7 @@ void DlDispatcher::drawPath(const SkPath& path) { // We can't "optimize" a path into a rectangle if it's open. bool closed; - if (path.isRect(&rect, &closed); closed) { + if (path.isRect(&rect, &closed) && closed) { canvas_.DrawRect(skia_conversions::ToRect(rect), paint_); return; }