mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
scroll, SetScrollTop, SetScrollLeft in dom-element-scroll
with test
This commit is contained in:
parent
41a5a8c75f
commit
9965f7e2cc
4 changed files with 157 additions and 5 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue