layout: Add basic support for getClientRects() queries (#31696)

This adds basic support for `getClientRects()` by sharing code with the
implementation of `getBoundingClientRect()`. In addition to sharing
code, it also shares all of the bugs. Primarily, scrolilng positions are
not taken into account when return boundary rectangles.
This commit is contained in:
Martin Robinson 2024-03-15 18:20:47 +01:00 committed by GitHub
parent 3f3820b3dc
commit 47a4ce467f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 48 additions and 71 deletions

View file

@ -179,11 +179,25 @@ pub fn process_content_box_request(
requested_node: OpaqueNode,
fragment_tree: Option<Arc<FragmentTree>>,
) -> Option<Rect<Au>> {
fragment_tree?.get_content_box_for_node(requested_node)
let rects = fragment_tree?.get_content_boxes_for_node(requested_node);
if rects.is_empty() {
return None;
}
Some(
rects
.iter()
.fold(Rect::zero(), |unioned_rect, rect| rect.union(&unioned_rect)),
)
}
pub fn process_content_boxes_request(_requested_node: OpaqueNode) -> Vec<Rect<Au>> {
vec![]
pub fn process_content_boxes_request(
requested_node: OpaqueNode,
fragment_tree: Option<Arc<FragmentTree>>,
) -> Vec<Rect<Au>> {
fragment_tree
.map(|tree| tree.get_content_boxes_for_node(requested_node))
.unwrap_or_default()
}
pub fn process_node_geometry_request(