mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:07:34 +00:00
LibWeb: Avoid some redundant calls to Layout::Box::absolute_rect()
Computing the absolute rect of a box requires walking the chain of containing blocks and apply any offsets encountered. This can be slow in deeply nested box trees, so let's at least avoid doing it multiple times when once is enough.
This commit is contained in:
parent
1103eb8d44
commit
eac31e21f2
2 changed files with 8 additions and 6 deletions
|
@ -305,11 +305,12 @@ Box::BorderRadiusData Box::normalized_border_radius_data()
|
|||
auto top_right_radius = computed_values().border_top_right_radius().resolved_or_zero(*this, width()).to_px(*this);
|
||||
|
||||
// Scale overlapping curves according to https://www.w3.org/TR/css-backgrounds-3/#corner-overlap
|
||||
auto bordered_rect = this->bordered_rect();
|
||||
auto f = 1.0f;
|
||||
f = min(f, bordered_rect().width() / (float)(top_left_radius + top_right_radius));
|
||||
f = min(f, bordered_rect().height() / (float)(top_right_radius + bottom_right_radius));
|
||||
f = min(f, bordered_rect().width() / (float)(bottom_left_radius + bottom_right_radius));
|
||||
f = min(f, bordered_rect().height() / (float)(top_left_radius + bottom_left_radius));
|
||||
f = min(f, bordered_rect.width() / (float)(top_left_radius + top_right_radius));
|
||||
f = min(f, bordered_rect.height() / (float)(top_right_radius + bottom_right_radius));
|
||||
f = min(f, bordered_rect.width() / (float)(bottom_left_radius + bottom_right_radius));
|
||||
f = min(f, bordered_rect.height() / (float)(top_left_radius + bottom_left_radius));
|
||||
|
||||
top_left_radius = (int)(top_left_radius * f);
|
||||
top_right_radius = (int)(top_right_radius * f);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue