diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-03-05 11:09:58 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-03-05 11:09:58 -0700 |
commit | 7fc37dfaa76c9265e6d2145fe5ef2fba5f6bd013 (patch) | |
tree | 48e10efbc7e3389b88d53666bd2e1b92ec198da0 /components/layout/opaque_node.rs | |
parent | caf5663e0981f36a621dde1dd51be2bd0a15dd24 (diff) | |
parent | 559ff68b31eabdf1025fba2fcc386b504256a0b2 (diff) | |
download | servo-7fc37dfaa76c9265e6d2145fe5ef2fba5f6bd013.tar.gz servo-7fc37dfaa76c9265e6d2145fe5ef2fba5f6bd013.zip |
auto merge of #5135 : iamdanfox/servo/fix-5120-rename-layout-util, r=jdm
A simple rename/refactor (https://github.com/servo/servo/issues/5120)
My first servo contribution!
Diffstat (limited to 'components/layout/opaque_node.rs')
-rw-r--r-- | components/layout/opaque_node.rs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/components/layout/opaque_node.rs b/components/layout/opaque_node.rs new file mode 100644 index 00000000000..e40538251de --- /dev/null +++ b/components/layout/opaque_node.rs @@ -0,0 +1,63 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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_blocks)] + +use gfx::display_list::OpaqueNode; +use libc::{c_void, uintptr_t}; +use script::dom::bindings::js::LayoutJS; +use script::dom::node::Node; +use script::layout_interface::{TrustedNodeAddress}; +use script_traits::UntrustedNodeAddress; +use wrapper::{LayoutNode, TLayoutNode, ThreadSafeLayoutNode}; + +pub trait OpaqueNodeMethods { + /// Converts a DOM node (layout view) to an `OpaqueNode`. + fn from_layout_node(node: &LayoutNode) -> Self; + + /// Converts a thread-safe DOM node (layout view) to an `OpaqueNode`. + fn from_thread_safe_layout_node(node: &ThreadSafeLayoutNode) -> Self; + + /// Converts a DOM node (script view) to an `OpaqueNode`. + fn from_script_node(node: TrustedNodeAddress) -> Self; + + /// Converts a DOM node to an `OpaqueNode'. + fn from_jsmanaged(node: &LayoutJS<Node>) -> 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_layout_node(node: &LayoutNode) -> OpaqueNode { + unsafe { + OpaqueNodeMethods::from_jsmanaged(node.get_jsmanaged()) + } + } + + fn from_thread_safe_layout_node(node: &ThreadSafeLayoutNode) -> OpaqueNode { + unsafe { + OpaqueNodeMethods::from_jsmanaged(node.get_jsmanaged()) + } + } + + fn from_script_node(node: TrustedNodeAddress) -> OpaqueNode { + unsafe { + OpaqueNodeMethods::from_jsmanaged(&LayoutJS::from_trusted_node_address(node)) + } + } + + fn from_jsmanaged(node: &LayoutJS<Node>) -> OpaqueNode { + unsafe { + let ptr: uintptr_t = node.get_jsobject() as uintptr_t; + OpaqueNode(ptr) + } + } + + fn to_untrusted_node_address(&self) -> UntrustedNodeAddress { + let OpaqueNode(addr) = *self; + UntrustedNodeAddress(addr as *const c_void) + } +} |