Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: - [X ] `./mach build -d` does not report any errors - [X ] `./mach test-tidy --faster` does not report any errors - [X ] These changes fix #11320 (github issue number if applicable). Either: - [X] There are tests for these changes OR - [ ] These changes do not require tests because _____ Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. Source-Repo: https://github.com/servo/servo Source-Revision: 2f9796fa696e9514280777398467696dd4f004b3
44 lines
1.5 KiB
Rust
44 lines
1.5 KiB
Rust
/* 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_code)]
|
|
|
|
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;
|
|
|
|
pub trait OpaqueNodeMethods {
|
|
/// 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_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 {
|
|
UntrustedNodeAddress(self.0 as *const c_void)
|
|
}
|
|
}
|