mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Fixes a number of issues with setting hover state, and simplifies the code.
Specifically: - Use inclusive_ancestors instead of ancestors, to detect hover on elements like divs. - Send the mousemove event after all the hover states have been set correctly. - Correctly handle removing hover state from elements when mouse is not over any elements. - Correctly detect when a reflow is required (previous code failed in several edge cases).
This commit is contained in:
parent
5622366bc5
commit
451512aa29
2 changed files with 78 additions and 93 deletions
|
@ -436,23 +436,23 @@ impl Page {
|
|||
address
|
||||
}
|
||||
|
||||
pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Option<Vec<UntrustedNodeAddress>> {
|
||||
pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Vec<UntrustedNodeAddress> {
|
||||
let mut results = vec!();
|
||||
let frame = self.frame();
|
||||
let document = frame.as_ref().unwrap().document.root();
|
||||
let root = match document.r().GetDocumentElement().root() {
|
||||
None => return None,
|
||||
Some(root) => root,
|
||||
};
|
||||
let root: JSRef<Node> = NodeCast::from_ref(root.r());
|
||||
let address = match self.layout().mouse_over(root.to_trusted_node_address(), *point) {
|
||||
Ok(MouseOverResponse(node_address)) => {
|
||||
Some(node_address)
|
||||
match document.r().GetDocumentElement().root() {
|
||||
Some(root) => {
|
||||
let root: JSRef<Node> = NodeCast::from_ref(root.r());
|
||||
match self.layout().mouse_over(root.to_trusted_node_address(), *point) {
|
||||
Ok(MouseOverResponse(node_addresses)) => {
|
||||
results = node_addresses;
|
||||
}
|
||||
Err(()) => {}
|
||||
};
|
||||
}
|
||||
Err(()) => {
|
||||
None
|
||||
}
|
||||
};
|
||||
address
|
||||
None => {}
|
||||
}
|
||||
results
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue