From c0486f93d4416b4f67885e6b787de542e1f680c5 Mon Sep 17 00:00:00 2001 From: MacDue Date: Mon, 13 Jun 2022 11:45:01 +0100 Subject: [PATCH] LibGfx: Optimize rounded rectangle with all radii 50% to single ellipse It's a common pattern on the web to draw a circle/ellipse by setting the border-radius to 50%. Previously the painter would do a lot of extra work painting and clipping each corner, this now detects that case and replaces it with a single call to fill_ellipse(). --- Userland/Libraries/LibGfx/AntiAliasingPainter.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Userland/Libraries/LibGfx/AntiAliasingPainter.cpp b/Userland/Libraries/LibGfx/AntiAliasingPainter.cpp index 1c2aaa6348..fe0e47bc8f 100644 --- a/Userland/Libraries/LibGfx/AntiAliasingPainter.cpp +++ b/Userland/Libraries/LibGfx/AntiAliasingPainter.cpp @@ -470,6 +470,10 @@ void Gfx::AntiAliasingPainter::fill_rect_with_rounded_corners(IntRect const& a_r a_rect.y() + a_rect.height() - bottom_right.vertical_radius }; + // All corners are centered at the same point, so this can be painted as a single ellipse. + if (top_left_corner == top_right_corner && top_right_corner == bottom_left_corner && bottom_left_corner == bottom_right_corner) + return fill_ellipse(a_rect, color); + IntRect top_rect { a_rect.x() + top_left.horizontal_radius, a_rect.y(),