aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/fragment_tree/fragment_tree.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/fragment_tree/fragment_tree.rs')
-rw-r--r--components/layout_2020/fragment_tree/fragment_tree.rs46
1 files changed, 18 insertions, 28 deletions
diff --git a/components/layout_2020/fragment_tree/fragment_tree.rs b/components/layout_2020/fragment_tree/fragment_tree.rs
index 023344a1b6c..f797f5644c6 100644
--- a/components/layout_2020/fragment_tree/fragment_tree.rs
+++ b/components/layout_2020/fragment_tree/fragment_tree.rs
@@ -172,36 +172,26 @@ impl FragmentTree {
.unwrap_or_else(Rect::zero)
}
- pub fn get_scroll_area_for_node(&self, requested_node: OpaqueNode) -> Rect<i32> {
- let mut scroll_area: PhysicalRect<Length> = PhysicalRect::zero();
+ pub fn get_scrolling_area_for_viewport(&self) -> PhysicalRect<Length> {
+ let mut scroll_area = self.initial_containing_block;
+ for fragment in self.root_fragments.iter() {
+ scroll_area = fragment
+ .borrow()
+ .scrolling_area(&self.initial_containing_block)
+ .union(&scroll_area);
+ }
+ scroll_area
+ }
+
+ pub fn get_scrolling_area_for_node(&self, requested_node: OpaqueNode) -> PhysicalRect<Length> {
let tag_to_find = Tag::new(requested_node);
- self.find(|fragment, _, containing_block| {
- if fragment.tag() != Some(tag_to_find) {
- return None::<()>;
+ let scroll_area = self.find(|fragment, _, containing_block| {
+ if fragment.tag() == Some(tag_to_find) {
+ Some(fragment.scrolling_area(&containing_block))
+ } else {
+ None
}
-
- scroll_area = match fragment {
- Fragment::Box(fragment) | Fragment::Float(fragment) => fragment
- .scrollable_overflow(&containing_block)
- .translate(containing_block.origin.to_vector()),
- Fragment::Text(_) |
- Fragment::AbsoluteOrFixedPositioned(_) |
- Fragment::Image(_) |
- Fragment::IFrame(_) |
- Fragment::Anonymous(_) => return None,
- };
- None::<()>
});
-
- Rect::new(
- Point2D::new(
- scroll_area.origin.x.px() as i32,
- scroll_area.origin.y.px() as i32,
- ),
- Size2D::new(
- scroll_area.size.width.px() as i32,
- scroll_area.size.height.px() as i32,
- ),
- )
+ scroll_area.unwrap_or_else(PhysicalRect::<Length>::zero)
}
}