mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Implement client{Top, Left, Height, Width} element properties
This commit is contained in:
parent
acf47a02cf
commit
162ecd0aac
8 changed files with 214 additions and 1 deletions
|
@ -1296,6 +1296,26 @@ impl<'a> ElementMethods for &'a Element {
|
|||
rect.origin.x + rect.size.width)
|
||||
}
|
||||
|
||||
fn ClientTop(self) -> i32 {
|
||||
let node = NodeCast::from_ref(self);
|
||||
node.get_client_rect().origin.y
|
||||
}
|
||||
|
||||
fn ClientLeft(self) -> i32 {
|
||||
let node = NodeCast::from_ref(self);
|
||||
node.get_client_rect().origin.x
|
||||
}
|
||||
|
||||
fn ClientWidth(self) -> i32 {
|
||||
let node = NodeCast::from_ref(self);
|
||||
node.get_client_rect().size.width
|
||||
}
|
||||
|
||||
fn ClientHeight(self) -> i32 {
|
||||
let node = NodeCast::from_ref(self);
|
||||
node.get_client_rect().size.height
|
||||
}
|
||||
|
||||
// https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#widl-Element-innerHTML
|
||||
fn GetInnerHTML(self) -> Fallible<DOMString> {
|
||||
//XXX TODO: XML case
|
||||
|
|
|
@ -504,6 +504,7 @@ pub trait NodeHelpers {
|
|||
|
||||
fn get_bounding_content_box(self) -> Rect<Au>;
|
||||
fn get_content_boxes(self) -> Vec<Rect<Au>>;
|
||||
fn get_client_rect(self) -> Rect<i32>;
|
||||
|
||||
fn before(self, nodes: Vec<NodeOrString>) -> ErrorResult;
|
||||
fn after(self, nodes: Vec<NodeOrString>) -> ErrorResult;
|
||||
|
@ -806,6 +807,10 @@ impl<'a> NodeHelpers for &'a Node {
|
|||
window_from_node(self).r().content_boxes_query(self.to_trusted_node_address())
|
||||
}
|
||||
|
||||
fn get_client_rect(self) -> Rect<i32> {
|
||||
window_from_node(self).r().client_rect_query(self.to_trusted_node_address())
|
||||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#dom-childnode-before
|
||||
fn before(self, nodes: Vec<NodeOrString>) -> ErrorResult {
|
||||
match self.parent_node.get() {
|
||||
|
|
|
@ -59,6 +59,11 @@ interface Element : Node {
|
|||
partial interface Element {
|
||||
DOMRectList getClientRects();
|
||||
DOMRect getBoundingClientRect();
|
||||
|
||||
readonly attribute long clientTop;
|
||||
readonly attribute long clientLeft;
|
||||
readonly attribute long clientWidth;
|
||||
readonly attribute long clientHeight;
|
||||
};
|
||||
|
||||
// https://domparsing.spec.whatwg.org/#extensions-to-the-element-interface
|
||||
|
|
|
@ -534,6 +534,7 @@ pub trait WindowHelpers {
|
|||
fn layout(&self) -> &LayoutRPC;
|
||||
fn content_box_query(self, content_box_request: TrustedNodeAddress) -> Rect<Au>;
|
||||
fn content_boxes_query(self, content_boxes_request: TrustedNodeAddress) -> Vec<Rect<Au>>;
|
||||
fn client_rect_query(self, node_geometry_request: TrustedNodeAddress) -> Rect<i32>;
|
||||
fn handle_reflow_complete_msg(self, reflow_id: u32);
|
||||
fn handle_resize_inactive_msg(self, new_size: WindowSizeData);
|
||||
fn set_fragment_name(self, fragment: Option<String>);
|
||||
|
@ -764,6 +765,13 @@ impl<'a> WindowHelpers for &'a Window {
|
|||
rects
|
||||
}
|
||||
|
||||
fn client_rect_query(self, node_geometry_request: TrustedNodeAddress) -> Rect<i32> {
|
||||
self.reflow(ReflowGoal::ForScriptQuery,
|
||||
ReflowQueryType::NodeGeometryQuery(node_geometry_request),
|
||||
ReflowReason::Query);
|
||||
self.layout_rpc.node_geometry().client_rect
|
||||
}
|
||||
|
||||
fn handle_reflow_complete_msg(self, reflow_id: u32) {
|
||||
let last_reflow_id = self.last_reflow_id.get();
|
||||
if last_reflow_id == reflow_id {
|
||||
|
@ -1072,6 +1080,7 @@ fn debug_reflow_events(goal: &ReflowGoal, query_type: &ReflowQueryType, reason:
|
|||
ReflowQueryType::NoQuery => "\tNoQuery",
|
||||
ReflowQueryType::ContentBoxQuery(_n) => "\tContentBoxQuery",
|
||||
ReflowQueryType::ContentBoxesQuery(_n) => "\tContentBoxesQuery",
|
||||
ReflowQueryType::NodeGeometryQuery(_n) => "\tNodeGeometryQuery",
|
||||
});
|
||||
|
||||
debug_msg.push_str(match *reason {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue