diff --git a/impeller/aiks/canvas.cc b/impeller/aiks/canvas.cc index 7ff85c58429b5..835748d0110d7 100644 --- a/impeller/aiks/canvas.cc +++ b/impeller/aiks/canvas.cc @@ -194,6 +194,11 @@ bool Canvas::AttemptDrawBlurredRRect(const Rect& rect, } void Canvas::DrawRect(Rect rect, const Paint& paint) { + if (paint.style == Paint::Style::kStroke) { + DrawPath(PathBuilder{}.AddRect(rect).TakePath(), paint); + return; + } + if (AttemptDrawBlurredRRect(rect, 0, paint)) { return; } diff --git a/impeller/display_list/display_list_unittests.cc b/impeller/display_list/display_list_unittests.cc index 6b904e974a822..f2b5ac2bb5889 100644 --- a/impeller/display_list/display_list_unittests.cc +++ b/impeller/display_list/display_list_unittests.cc @@ -1120,5 +1120,43 @@ TEST_P(DisplayListTest, DrawVerticesSolidColorTrianglesWithIndices) { ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); } +TEST_P(DisplayListTest, DrawShapes) { + flutter::DisplayListBuilder builder; + std::vector joins = { + flutter::DlStrokeJoin::kBevel, + flutter::DlStrokeJoin::kRound, + flutter::DlStrokeJoin::kMiter, + }; + flutter::DlPaint paint = // + flutter::DlPaint() // + .setColor(flutter::DlColor::kWhite()) // + .setDrawStyle(flutter::DlDrawStyle::kFill) // + .setStrokeWidth(10); + flutter::DlPaint stroke_paint = // + flutter::DlPaint() // + .setColor(flutter::DlColor::kWhite()) // + .setDrawStyle(flutter::DlDrawStyle::kStroke) // + .setStrokeWidth(10); + SkPath path = SkPath().addPoly({{150, 50}, {160, 50}}, false); + + builder.translate(300, 50); + builder.scale(0.8, 0.8); + for (auto join : joins) { + paint.setStrokeJoin(join); + stroke_paint.setStrokeJoin(join); + builder.drawRect(SkRect::MakeXYWH(0, 0, 100, 100), paint); + builder.drawRect(SkRect::MakeXYWH(0, 150, 100, 100), stroke_paint); + builder.drawRRect( + SkRRect::MakeRectXY(SkRect::MakeXYWH(150, 0, 100, 100), 30, 30), paint); + builder.drawRRect( + SkRRect::MakeRectXY(SkRect::MakeXYWH(150, 150, 100, 100), 30, 30), + stroke_paint); + builder.drawCircle({350, 50}, 50, paint); + builder.drawCircle({350, 200}, 50, stroke_paint); + builder.translate(0, 300); + } + ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); +} + } // namespace testing } // namespace impeller