mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Make mouse_over_targets a RootedVec
This commit is contained in:
parent
40ee41ca92
commit
e0724ec9a9
2 changed files with 17 additions and 13 deletions
|
@ -231,7 +231,7 @@ pub trait DocumentHelpers<'a> {
|
||||||
fn handle_mouse_move_event(self,
|
fn handle_mouse_move_event(self,
|
||||||
js_runtime: *mut JSRuntime,
|
js_runtime: *mut JSRuntime,
|
||||||
point: Point2D<f32>,
|
point: Point2D<f32>,
|
||||||
prev_mouse_over_targets: &mut Vec<JS<Node>>);
|
prev_mouse_over_targets: &mut RootedVec<JS<Node>>);
|
||||||
|
|
||||||
fn set_current_script(self, script: Option<JSRef<HTMLScriptElement>>);
|
fn set_current_script(self, script: Option<JSRef<HTMLScriptElement>>);
|
||||||
fn trigger_mozbrowser_event(self, event: MozBrowserEvent);
|
fn trigger_mozbrowser_event(self, event: MozBrowserEvent);
|
||||||
|
@ -562,17 +562,18 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
|
||||||
fn handle_mouse_move_event(self,
|
fn handle_mouse_move_event(self,
|
||||||
js_runtime: *mut JSRuntime,
|
js_runtime: *mut JSRuntime,
|
||||||
point: Point2D<f32>,
|
point: Point2D<f32>,
|
||||||
prev_mouse_over_targets: &mut Vec<JS<Node>>) {
|
prev_mouse_over_targets: &mut RootedVec<JS<Node>>) {
|
||||||
// Build a list of elements that are currently under the mouse.
|
// Build a list of elements that are currently under the mouse.
|
||||||
let mouse_over_addresses = self.get_nodes_under_mouse(&point);
|
let mouse_over_addresses = self.get_nodes_under_mouse(&point);
|
||||||
let mouse_over_targets: Vec<JS<Node>> = mouse_over_addresses.iter()
|
let mut mouse_over_targets: RootedVec<JS<Node>> = RootedVec::new();
|
||||||
.filter_map(|node_address| {
|
for node_address in mouse_over_addresses.iter() {
|
||||||
let node = node::from_untrusted_node_address(js_runtime, *node_address);
|
let node = node::from_untrusted_node_address(js_runtime, *node_address);
|
||||||
node.root().r().inclusive_ancestors()
|
mouse_over_targets.push(node.root().r().inclusive_ancestors()
|
||||||
.map(|node| node.root())
|
.map(|node| node.root())
|
||||||
.find(|node| node.r().is_element())
|
.find(|node| node.r()
|
||||||
.map(|node| JS::from_rooted(node.r()))
|
.is_element())
|
||||||
}).collect();
|
.map(|node| JS::from_rooted(node.r())).unwrap());
|
||||||
|
};
|
||||||
|
|
||||||
// Remove hover from any elements in the previous list that are no longer
|
// Remove hover from any elements in the previous list that are no longer
|
||||||
// under the mouse.
|
// under the mouse.
|
||||||
|
@ -619,7 +620,8 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the current mouse over targets for next frame
|
// Store the current mouse over targets for next frame
|
||||||
*prev_mouse_over_targets = mouse_over_targets;
|
prev_mouse_over_targets.clear();
|
||||||
|
prev_mouse_over_targets.append(&mut *mouse_over_targets);
|
||||||
|
|
||||||
let window = self.window.root();
|
let window = self.window.root();
|
||||||
window.r().reflow(ReflowGoal::ForDisplay,
|
window.r().reflow(ReflowGoal::ForDisplay,
|
||||||
|
|
|
@ -28,7 +28,7 @@ use dom::bindings::js::{JS, JSRef, OptionalRootable, RootedReference};
|
||||||
use dom::bindings::js::{RootCollection, RootCollectionPtr};
|
use dom::bindings::js::{RootCollection, RootCollectionPtr};
|
||||||
use dom::bindings::refcounted::{LiveDOMReferences, Trusted, TrustedReference};
|
use dom::bindings::refcounted::{LiveDOMReferences, Trusted, TrustedReference};
|
||||||
use dom::bindings::structuredclone::StructuredCloneData;
|
use dom::bindings::structuredclone::StructuredCloneData;
|
||||||
use dom::bindings::trace::{JSTraceable, trace_collections};
|
use dom::bindings::trace::{JSTraceable, trace_collections, RootedVec};
|
||||||
use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap};
|
use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap};
|
||||||
use dom::document::{Document, IsHTMLDocument, DocumentHelpers, DocumentProgressHandler, DocumentProgressTask, DocumentSource};
|
use dom::document::{Document, IsHTMLDocument, DocumentHelpers, DocumentProgressHandler, DocumentProgressTask, DocumentSource};
|
||||||
use dom::element::{Element, AttributeHandlers};
|
use dom::element::{Element, AttributeHandlers};
|
||||||
|
@ -1243,9 +1243,11 @@ impl ScriptTask {
|
||||||
}
|
}
|
||||||
let page = get_page(&self.root_page(), pipeline_id);
|
let page = get_page(&self.root_page(), pipeline_id);
|
||||||
let document = page.document().root();
|
let document = page.document().root();
|
||||||
let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut();
|
let mut mouse_over_targets = RootedVec::new();
|
||||||
|
mouse_over_targets.append(&mut *self.mouse_over_targets.borrow_mut());
|
||||||
|
|
||||||
document.r().handle_mouse_move_event(self.js_runtime.ptr, point, mouse_over_targets);
|
document.r().handle_mouse_move_event(self.js_runtime.ptr, point, &mut mouse_over_targets);
|
||||||
|
*self.mouse_over_targets.borrow_mut() = mouse_over_targets.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyEvent(key, state, modifiers) => {
|
KeyEvent(key, state, modifiers) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue