From 7001bbe87c1d6f37e8f8f76be368072fab2d985b Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 22 Sep 2023 15:22:19 -0700 Subject: [PATCH 1/2] [Impeller] dont treat non-rects as rects. --- impeller/aiks/aiks_unittests.cc | 23 +++++++++++++++++++++++ impeller/display_list/dl_dispatcher.cc | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc index 9696cdea6b207..45123dc617494 100644 --- a/impeller/aiks/aiks_unittests.cc +++ b/impeller/aiks/aiks_unittests.cc @@ -1289,6 +1289,29 @@ TEST_P(AiksTest, CanDrawAnOpenPath) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } +TEST_P(AiksTest, CanDrawAnOpenPathThatIsntARect) { + Canvas canvas; + + // Starting at (50, 50), draw lines from: + // 1. (50, height) + // 2. (width, height) + // 3. (width, 50) + PathBuilder builder; + builder.MoveTo({50, 50}); + builder.LineTo({520, 120}); + builder.LineTo({300, 310}); + builder.LineTo({100, 50}); + + 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; } From 93dca2e56ba38f30fe8dfe53353c10c1cd99d201 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 22 Sep 2023 15:23:35 -0700 Subject: [PATCH 2/2] ++ --- impeller/aiks/aiks_unittests.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc index 45123dc617494..5f110b9471577 100644 --- a/impeller/aiks/aiks_unittests.cc +++ b/impeller/aiks/aiks_unittests.cc @@ -1292,15 +1292,14 @@ TEST_P(AiksTest, CanDrawAnOpenPath) { TEST_P(AiksTest, CanDrawAnOpenPathThatIsntARect) { Canvas canvas; - // Starting at (50, 50), draw lines from: - // 1. (50, height) - // 2. (width, height) - // 3. (width, 50) + // 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();