diff options
author | Zhen Zhang <izgzhen@gmail.com> | 2016-04-03 15:41:37 +0800 |
---|---|---|
committer | Zhen Zhang <izgzhen@gmail.com> | 2016-04-19 12:27:35 +0800 |
commit | fefdaf76ded7675c0c67fd33f5abfbb5f74ac30f (patch) | |
tree | 90131ccb368cc04b279f82b085052ae4236495e2 /components/script/dom/window.rs | |
parent | f73c6143d5375db80fd2e0b7de96a99c78b5866b (diff) | |
download | servo-fefdaf76ded7675c0c67fd33f5abfbb5f74ac30f.tar.gz servo-fefdaf76ded7675c0c67fd33f5abfbb5f74ac30f.zip |
Implement ScrollTop and ScrollLeft getters:
Add new compositor message to get scroll_offset;
Add new layout query for computed value of overflow-x/y;
Implement layer_id method for ThreadSafeLayoutNode;
Add new layout query for layer_id;
Implement script interface for getting scrollTop and scrollLeft, as well as relavant helper functions.
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r-- | components/script/dom/window.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 8a3affefe06..75c7089fac3 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -74,6 +74,7 @@ use std::sync::{Arc, Mutex}; use string_cache::Atom; use style::context::ReflowGoal; use style::error_reporting::ParseErrorReporter; +use style::properties::longhands::{overflow_x}; use style::selector_impl::PseudoElement; use task_source::TaskSource; use task_source::dom_manipulation::{DOMManipulationTaskSource, DOMManipulationTask}; @@ -1122,6 +1123,25 @@ impl Window { self.layout_rpc.node_scroll_area().client_rect } + pub fn overflow_query(&self, node: TrustedNodeAddress) -> Point2D<overflow_x::computed_value::T> { + self.reflow(ReflowGoal::ForScriptQuery, + ReflowQueryType::NodeOverflowQuery(node), + ReflowReason::Query); + self.layout_rpc.node_overflow().0.unwrap() + } + + pub fn scroll_offset_query(&self, node: TrustedNodeAddress) -> Point2D<f32> { + self.reflow(ReflowGoal::ForScriptQuery, + ReflowQueryType::NodeLayerIdQuery(node), + ReflowReason::Query); + let layer_id = self.layout_rpc.node_layer_id().layer_id; + let pipeline_id = self.id; + + let (send, recv) = ipc::channel::<Point2D<f32>>().unwrap(); + self.compositor.send(ScriptToCompositorMsg::GetScrollOffset(pipeline_id, layer_id, send)).unwrap(); + recv.recv().unwrap_or(Point2D::zero()) + } + pub fn resolved_style_query(&self, element: TrustedNodeAddress, pseudo: Option<PseudoElement>, @@ -1476,6 +1496,8 @@ fn debug_reflow_events(id: PipelineId, goal: &ReflowGoal, query_type: &ReflowQue ReflowQueryType::ContentBoxesQuery(_n) => "\tContentBoxesQuery", ReflowQueryType::HitTestQuery(_n, _o) => "\tHitTestQuery", ReflowQueryType::NodeGeometryQuery(_n) => "\tNodeGeometryQuery", + ReflowQueryType::NodeLayerIdQuery(_n) => "\tNodeLayerIdQuery", + ReflowQueryType::NodeOverflowQuery(_n) => "\tNodeOverFlowQuery", ReflowQueryType::NodeScrollGeometryQuery(_n) => "\tNodeScrollGeometryQuery", ReflowQueryType::ResolvedStyleQuery(_, _, _) => "\tResolvedStyleQuery", ReflowQueryType::OffsetParentQuery(_n) => "\tOffsetParentQuery", |