1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:27:46 +00:00

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().
This commit is contained in:
MacDue 2022-06-13 11:45:01 +01:00 committed by Linus Groh
parent 16c4b606f6
commit c0486f93d4

View file

@ -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(),