diff options
author | tigercosmos <b04209032@ntu.edu.tw> | 2017-11-06 00:32:11 +0800 |
---|---|---|
committer | tigercosmos <b04209032@ntu.edu.tw> | 2017-11-12 02:01:44 +0800 |
commit | 9965f7e2cc0f722acfee5f0710b74a84d1112b54 (patch) | |
tree | b3a4950521c313acd1364463fb59ca3533302a5a /components/script/dom/element.rs | |
parent | 41a5a8c75faa348ff7301963a7f2f6fab7423750 (diff) | |
download | servo-9965f7e2cc0f722acfee5f0710b74a84d1112b54.tar.gz servo-9965f7e2cc0f722acfee5f0710b74a84d1112b54.zip |
scroll, SetScrollTop, SetScrollLeft in `dom-element-scroll` with test
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index a56e16356bf..f443fb71da9 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -363,6 +363,19 @@ impl Element { !self.overflow_y_is_visible() } + // https://drafts.csswg.org/cssom-view/#scrolling-box + fn has_scrolling_box(&self) -> bool { + // TODO: scrolling mechanism, such as scrollbar (We don't have scrollbar yet) + // self.has_scrolling_mechanism() + self.overflow_x_is_hidden() || + self.overflow_y_is_hidden() + } + + fn has_overflow(&self) -> bool { + self.ScrollHeight() > self.ClientHeight() || + self.ScrollWidth() > self.ClientWidth() + } + // used value of overflow-x is "visible" fn overflow_x_is_visible(&self) -> bool { let window = window_from_node(self); @@ -376,6 +389,20 @@ impl Element { let overflow_pair = window.overflow_query(self.upcast::<Node>().to_trusted_node_address()); overflow_pair.y == overflow_y::computed_value::T::visible } + + // used value of overflow-x is "hidden" + fn overflow_x_is_hidden(&self) -> bool { + let window = window_from_node(self); + let overflow_pair = window.overflow_query(self.upcast::<Node>().to_trusted_node_address()); + overflow_pair.x == overflow_x::computed_value::T::hidden + } + + // used value of overflow-y is "hidden" + fn overflow_y_is_hidden(&self) -> bool { + let window = window_from_node(self); + let overflow_pair = window.overflow_query(self.upcast::<Node>().to_trusted_node_address()); + overflow_pair.y == overflow_y::computed_value::T::hidden + } } #[allow(unsafe_code)] @@ -1471,7 +1498,13 @@ impl Element { return; } - // Step 10 (TODO) + // Step 10 + if !self.has_css_layout_box() || + !self.has_scrolling_box() || + !self.has_overflow() + { + return; + } // Step 11 win.scroll_node(node, x, y, behavior); @@ -1927,7 +1960,13 @@ impl ElementMethods for Element { return; } - // Step 10 (TODO) + // Step 10 + if !self.has_css_layout_box() || + !self.has_scrolling_box() || + !self.has_overflow() + { + return; + } // Step 11 win.scroll_node(node, self.ScrollLeft(), y, behavior); @@ -2020,7 +2059,13 @@ impl ElementMethods for Element { return; } - // Step 10 (TODO) + // Step 10 + if !self.has_css_layout_box() || + !self.has_scrolling_box() || + !self.has_overflow() + { + return; + } // Step 11 win.scroll_node(node, x, self.ScrollTop(), behavior); |