mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Avoid the Vec reversal in DisplayList::hit_test.
This commit is contained in:
parent
4e8ff4f9bc
commit
6b981039d0
3 changed files with 4 additions and 5 deletions
|
@ -480,9 +480,8 @@ impl DisplayList {
|
||||||
&draw_target, &stacking_context.filters, stacking_context.blend_mode);
|
&draw_target, &stacking_context.filters, stacking_context.blend_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Places all nodes containing the point of interest into `result`, topmost first. Respects
|
/// Return all nodes containing the point of interest, bottommost first,
|
||||||
/// the `pointer-events` CSS property If `topmost_only` is true, stops after placing one node
|
/// and respecting the `pointer-events` CSS property.
|
||||||
/// into the list. `result` must be empty upon entry to this function.
|
|
||||||
pub fn hit_test(&self, point: &Point2D<Au>, scroll_offsets: &ScrollOffsetMap)
|
pub fn hit_test(&self, point: &Point2D<Au>, scroll_offsets: &ScrollOffsetMap)
|
||||||
-> Vec<DisplayItemMetadata> {
|
-> Vec<DisplayItemMetadata> {
|
||||||
let mut traversal = DisplayListTraversal {
|
let mut traversal = DisplayListTraversal {
|
||||||
|
@ -492,7 +491,6 @@ impl DisplayList {
|
||||||
};
|
};
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
self.root_stacking_context.hit_test(&mut traversal, point, scroll_offsets, &mut result);
|
self.root_stacking_context.hit_test(&mut traversal, point, scroll_offsets, &mut result);
|
||||||
result.reverse();
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,7 @@ impl LayoutRPC for LayoutRPCImpl {
|
||||||
};
|
};
|
||||||
|
|
||||||
nodes_from_point_list.iter()
|
nodes_from_point_list.iter()
|
||||||
|
.rev()
|
||||||
.map(|metadata| metadata.node.to_untrusted_node_address())
|
.map(|metadata| metadata.node.to_untrusted_node_address())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1160,7 +1160,7 @@ impl LayoutThread {
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.expect("Tried to hit test with no display list")
|
.expect("Tried to hit test with no display list")
|
||||||
.hit_test(&point, &rw_data.stacking_context_scroll_offsets);
|
.hit_test(&point, &rw_data.stacking_context_scroll_offsets);
|
||||||
rw_data.hit_test_response = (result.get(0).cloned(), update_cursor);
|
rw_data.hit_test_response = (result.last().cloned(), update_cursor);
|
||||||
},
|
},
|
||||||
ReflowQueryType::NodeGeometryQuery(node) => {
|
ReflowQueryType::NodeGeometryQuery(node) => {
|
||||||
let node = unsafe { ServoLayoutNode::new(&node) };
|
let node = unsafe { ServoLayoutNode::new(&node) };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue