aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/query.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout/query.rs')
-rw-r--r--components/layout/query.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/components/layout/query.rs b/components/layout/query.rs
index a4eba68b947..61dd1c2ba33 100644
--- a/components/layout/query.rs
+++ b/components/layout/query.rs
@@ -76,7 +76,7 @@ pub struct LayoutThreadData {
pub scroll_id_response: Option<ExternalScrollId>,
/// A queued response for the scroll {top, left, width, height} of a node in pixels.
- pub scroll_area_response: Rect<i32>,
+ pub scrolling_area_response: Rect<i32>,
/// A queued response for the resolved style property of an element.
pub resolved_style_response: String,
@@ -158,9 +158,9 @@ impl LayoutRPC for LayoutRPCImpl {
}
}
- fn node_scroll_area(&self) -> NodeGeometryResponse {
+ fn scrolling_area(&self) -> NodeGeometryResponse {
NodeGeometryResponse {
- client_rect: self.0.lock().unwrap().scroll_area_response,
+ client_rect: self.0.lock().unwrap().scrolling_area_response,
}
}
@@ -730,10 +730,21 @@ pub fn process_node_scroll_id_request<'dom>(
}
/// https://drafts.csswg.org/cssom-view/#scrolling-area
-pub fn process_node_scroll_area_request(
- requested_node: OpaqueNode,
+pub fn process_scrolling_area_request(
+ requested_node: Option<OpaqueNode>,
layout_root: &mut dyn Flow,
) -> Rect<i32> {
+ let requested_node = match requested_node {
+ Some(node) => node,
+ None => {
+ let rect = layout_root.base().overflow.scroll;
+ return Rect::new(
+ Point2D::new(rect.origin.x.to_nearest_px(), rect.origin.y.to_nearest_px()),
+ Size2D::new(rect.width().ceil_to_px(), rect.height().ceil_to_px()),
+ );
+ },
+ };
+
let mut iterator = UnioningFragmentScrollAreaIterator::new(requested_node);
sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator);
match iterator.overflow_direction {