diff --git a/components/layout/opaque_node.rs b/components/layout/opaque_node.rs index db80d45fe1d..41a4ccd5617 100644 --- a/components/layout/opaque_node.rs +++ b/components/layout/opaque_node.rs @@ -2,31 +2,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#![allow(unsafe_code)] - use gfx::display_list::OpaqueNode; -use libc::{c_void, uintptr_t}; -use script::layout_interface::LayoutJS; -use script::layout_interface::Node; +use libc::c_void; use script_traits::UntrustedNodeAddress; pub trait OpaqueNodeMethods { - /// Converts a DOM node to an `OpaqueNode'. - fn from_jsmanaged(node: &LayoutJS) -> Self; - /// Converts this node to an `UntrustedNodeAddress`. An `UntrustedNodeAddress` is just the type /// of node that script expects to receive in a hit test. fn to_untrusted_node_address(&self) -> UntrustedNodeAddress; } impl OpaqueNodeMethods for OpaqueNode { - fn from_jsmanaged(node: &LayoutJS) -> OpaqueNode { - unsafe { - let ptr: uintptr_t = node.get_jsobject() as uintptr_t; - OpaqueNode(ptr) - } - } - fn to_untrusted_node_address(&self) -> UntrustedNodeAddress { UntrustedNodeAddress(self.0 as *const c_void) } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index 4c4a77f12e9..2be1c47a05f 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -156,7 +156,7 @@ impl<'ln> TNode for ServoLayoutNode<'ln> { } fn opaque(&self) -> OpaqueNode { - OpaqueNodeMethods::from_jsmanaged(unsafe { self.get_jsmanaged() }) + unsafe { self.get_jsmanaged().opaque() } } fn layout_parent_node(self, reflow_root: OpaqueNode) -> Option> { @@ -732,7 +732,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { } fn opaque(&self) -> OpaqueNode { - OpaqueNodeMethods::from_jsmanaged(unsafe { self.get_jsmanaged() }) + unsafe { self.get_jsmanaged().opaque() } } fn type_id(&self) -> Option { diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index f73abf1bd17..cf3257e7137 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -75,6 +75,7 @@ use std::iter::{self, FilterMap, Peekable}; use std::mem; use std::ops::Range; use string_cache::{Atom, Namespace, QualName}; +use style::dom::OpaqueNode; use style::selector_impl::ServoSelectorImpl; use url::Url; use util::thread_state; @@ -961,6 +962,7 @@ pub trait LayoutNodeHelpers { fn image_url(&self) -> Option; fn canvas_data(&self) -> Option; fn iframe_pipeline_id(&self) -> PipelineId; + fn opaque(&self) -> OpaqueNode; } impl LayoutNodeHelpers for LayoutJS { @@ -1101,6 +1103,13 @@ impl LayoutNodeHelpers for LayoutJS { .expect("not an iframe element!"); iframe_element.pipeline_id().unwrap() } + + #[allow(unsafe_code)] + fn opaque(&self) -> OpaqueNode { + unsafe { + OpaqueNode(self.get_jsobject() as usize) + } + } }