layout: Unify scrollable overflow calculation and include position: absolute (#37475)

Previously, layout was handling scrollable overflow and srolling area
calculation separately, only excluding the "unreachable scrollable
overflow region" at the last step. In addition, `position: absolute` was
not included in scrollable overflow calculation.

This change combines the two concepts into a single scrollable overflow
calculation and starts taking into account `position: absolute`.
Finally, `BoxFragment::scrollable_overflow_for_parent` is converted to
use early returns which reduces the amount of indentation.

Fixes #35928.
Fixes #37204.
Testing: This causes some WPT test to pass, but also two to start
failing:
- `/css/css-masking/clip-path/clip-path-fixed-scroll.html`: This seems
to fail
because script is scrolling past the boundaries of the document. This is
a
failure that was uncovered by the fixed element now being added to the
   page's scroll area.
- `/css/css-overflow/overflow-outside-padding.html`: One test has
started to fail
here because now the absolutely positioned element is included in the
scroll area,
and I think there is an issue with how we are placing RTL items with
negative margins.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-06-16 13:30:31 +02:00 committed by GitHub
parent 29e618dcf7
commit 0f61361e27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 123 additions and 142 deletions

View file

@ -92,7 +92,7 @@ pub fn process_node_scroll_area_request(
.first()
.map(Fragment::scrolling_area)
.unwrap_or_default(),
None => tree.get_scrolling_area_for_viewport(),
None => tree.scrollable_overflow(),
};
Rect::new(