diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/layout/layout_thread.rs | 2 | ||||
-rw-r--r-- | components/layout/query.rs | 8 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 5 | ||||
-rw-r--r-- | components/script/layout_interface.rs | 88 | ||||
-rw-r--r-- | components/script_layout_interface/Cargo.toml | 3 | ||||
-rw-r--r-- | components/script_layout_interface/lib.rs | 4 | ||||
-rw-r--r-- | components/script_layout_interface/rpc.rs | 96 | ||||
-rw-r--r-- | components/servo/Cargo.lock | 3 |
9 files changed, 119 insertions, 92 deletions
diff --git a/components/layout/layout_thread.rs b/components/layout/layout_thread.rs index 0493bf9b32e..14179c38985 100644 --- a/components/layout/layout_thread.rs +++ b/components/layout/layout_thread.rs @@ -46,10 +46,10 @@ use query::process_offset_parent_query; use query::{LayoutRPCImpl, process_content_box_request, process_content_boxes_request}; use query::{process_node_geometry_request, process_node_layer_id_request, process_node_scroll_area_request}; use query::{process_node_overflow_request, process_resolved_style_request, process_margin_style_query}; -use script::layout_interface::{LayoutRPC, OffsetParentResponse, NodeOverflowResponse, MarginStyleResponse}; use script::layout_interface::{Msg, NewLayoutThreadInfo, Reflow, ReflowQueryType, ScriptReflow}; use script::reporter::CSSErrorReporter; use script_layout_interface::restyle_damage::{REPAINT, STORE_OVERFLOW, REFLOW_OUT_OF_FLOW, REFLOW}; +use script_layout_interface::rpc::{LayoutRPC, MarginStyleResponse, NodeOverflowResponse, OffsetParentResponse}; use script_layout_interface::wrapper_traits::LayoutNode; use script_layout_interface::{OpaqueStyleAndLayoutData, PartialStyleAndLayoutData}; use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as ConstellationMsg}; diff --git a/components/layout/query.rs b/components/layout/query.rs index 89b03457175..e558496f82d 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -16,9 +16,11 @@ use gfx::display_list::OpaqueNode; use gfx_traits::LayerId; use layout_thread::LayoutThreadData; use opaque_node::OpaqueNodeMethods; -use script::layout_interface::{ContentBoxResponse, NodeOverflowResponse, ContentBoxesResponse, NodeGeometryResponse}; -use script::layout_interface::{HitTestResponse, LayoutRPC, OffsetParentResponse, NodeLayerIdResponse}; -use script::layout_interface::{ResolvedStyleResponse, MarginStyleResponse}; +use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse}; +use script_layout_interface::rpc::{HitTestResponse, LayoutRPC}; +use script_layout_interface::rpc::{MarginStyleResponse, NodeGeometryResponse}; +use script_layout_interface::rpc::{NodeLayerIdResponse, NodeOverflowResponse}; +use script_layout_interface::rpc::{OffsetParentResponse, ResolvedStyleResponse}; use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode}; use script_traits::LayoutMsg as ConstellationMsg; use script_traits::UntrustedNodeAddress; diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 070a3e1b954..4abfc8fd58d 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -55,7 +55,6 @@ use js::glue::{CallObjectTracer, CallUnbarrieredObjectTracer, CallValueTracer}; use js::jsapi::{GCTraceKindToAscii, Heap, TraceKind, JSObject, JSTracer}; use js::jsval::JSVal; use js::rust::Runtime; -use layout_interface::LayoutRPC; use libc; use msg::constellation_msg::{FrameType, PipelineId, SubpageId, WindowSizeData, WindowSizeType, ReferrerPolicy}; use net_traits::filemanager_thread::SelectedFileId; @@ -68,6 +67,7 @@ use offscreen_gl_context::GLLimits; use profile_traits::mem::ProfilerChan as MemProfilerChan; use profile_traits::time::ProfilerChan as TimeProfilerChan; use script_layout_interface::OpaqueStyleAndLayoutData; +use script_layout_interface::rpc::LayoutRPC; use script_runtime::ScriptChan; use script_traits::{TimerEventId, TimerSource, TouchpadPressurePhase, UntrustedNodeAddress}; use serde::{Deserialize, Serialize}; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index f2f3195c875..6dc43f8b925 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -42,8 +42,7 @@ use js::jsapi::{Evaluate2, HandleObject, HandleValue, JSAutoCompartment, JSConte use js::jsapi::{JS_GetRuntime, JS_GC, MutableHandleValue, SetWindowProxy}; use js::rust::CompileOptionsWrapper; use js::rust::Runtime; -use layout_interface::{ContentBoxResponse, ContentBoxesResponse, ResolvedStyleResponse, ScriptReflow}; -use layout_interface::{LayoutRPC, Msg, Reflow, ReflowQueryType, MarginStyleResponse}; +use layout_interface::{Msg, Reflow, ReflowQueryType, ScriptReflow}; use libc; use msg::constellation_msg::{FrameType, LoadData, PanicMsg, PipelineId, SubpageId}; use msg::constellation_msg::{WindowSizeData, WindowSizeType}; @@ -60,6 +59,8 @@ use profile_traits::time::{ProfilerChan, TimerMetadataReflowType, profile}; use reporter::CSSErrorReporter; use rustc_serialize::base64::{FromBase64, STANDARD, ToBase64}; use script_layout_interface::TrustedNodeAddress; +use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC}; +use script_layout_interface::rpc::{MarginStyleResponse, ResolvedStyleResponse}; use script_runtime::{ScriptChan, ScriptPort}; use script_thread::SendableMainThreadScriptChan; use script_thread::{MainThreadScriptChan, MainThreadScriptMsg, RunnableWrapper}; diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs index cb645ef6439..3c5516e4b8d 100644 --- a/components/script/layout_interface.rs +++ b/components/script/layout_interface.rs @@ -14,14 +14,14 @@ use ipc_channel::ipc::{IpcReceiver, IpcSender}; use msg::constellation_msg::{PanicMsg, PipelineId, WindowSizeData}; use net_traits::image_cache_thread::ImageCacheThread; use profile_traits::mem::ReportsChan; +use script_layout_interface::rpc::LayoutRPC; use script_layout_interface::{OpaqueStyleAndLayoutData, TrustedNodeAddress}; -use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as ConstellationMsg}; -use script_traits::{StackingContextScrollState, UntrustedNodeAddress}; +use script_traits::{ConstellationControlMsg, LayoutControlMsg}; +use script_traits::{LayoutMsg as ConstellationMsg, StackingContextScrollState}; use std::sync::Arc; use std::sync::mpsc::{Receiver, Sender}; use string_cache::Atom; use style::context::ReflowGoal; -use style::properties::longhands::{margin_top, margin_right, margin_bottom, margin_left, overflow_x}; use style::selector_impl::PseudoElement; use style::servo::Stylesheet; use url::Url; @@ -101,88 +101,6 @@ pub enum Msg { SetStackingContextScrollStates(Vec<StackingContextScrollState>), } -/// Synchronous messages that script can send to layout. -/// -/// In general, you should use messages to talk to Layout. Use the RPC interface -/// if and only if the work is -/// -/// 1) read-only with respect to LayoutThreadData, -/// 2) small, -/// 3) and really needs to be fast. -pub trait LayoutRPC { - /// Requests the dimensions of the content box, as in the `getBoundingClientRect()` call. - fn content_box(&self) -> ContentBoxResponse; - /// Requests the dimensions of all the content boxes, as in the `getClientRects()` call. - fn content_boxes(&self) -> ContentBoxesResponse; - /// Requests the geometry of this node. Used by APIs such as `clientTop`. - fn node_geometry(&self) -> NodeGeometryResponse; - /// Requests the overflow-x and overflow-y of this node. Used by `scrollTop` etc. - fn node_overflow(&self) -> NodeOverflowResponse; - /// Requests the scroll geometry of this node. Used by APIs such as `scrollTop`. - fn node_scroll_area(&self) -> NodeGeometryResponse; - /// Requests the layer id of this node. Used by APIs such as `scrollTop` - fn node_layer_id(&self) -> NodeLayerIdResponse; - /// Requests the node containing the point of interest - fn hit_test(&self) -> HitTestResponse; - /// Query layout for the resolved value of a given CSS property - fn resolved_style(&self) -> ResolvedStyleResponse; - fn offset_parent(&self) -> OffsetParentResponse; - /// Query layout for the resolve values of the margin properties for an element. - fn margin_style(&self) -> MarginStyleResponse; - - fn nodes_from_point(&self, point: Point2D<f32>) -> Vec<UntrustedNodeAddress>; -} - -#[derive(Clone)] -pub struct MarginStyleResponse { - pub top: margin_top::computed_value::T, - pub right: margin_right::computed_value::T, - pub bottom: margin_bottom::computed_value::T, - pub left: margin_left::computed_value::T, -} - -impl MarginStyleResponse { - pub fn empty() -> MarginStyleResponse { - MarginStyleResponse { - top: margin_top::computed_value::T::Auto, - right: margin_right::computed_value::T::Auto, - bottom: margin_bottom::computed_value::T::Auto, - left: margin_left::computed_value::T::Auto, - } - } -} - -pub struct NodeOverflowResponse(pub Option<Point2D<overflow_x::computed_value::T>>); - -pub struct ContentBoxResponse(pub Rect<Au>); -pub struct ContentBoxesResponse(pub Vec<Rect<Au>>); -pub struct HitTestResponse { - pub node_address: Option<UntrustedNodeAddress>, -} -pub struct NodeGeometryResponse { - pub client_rect: Rect<i32>, -} - -pub struct NodeLayerIdResponse { - pub layer_id: LayerId, -} - -pub struct ResolvedStyleResponse(pub Option<String>); - -#[derive(Clone)] -pub struct OffsetParentResponse { - pub node_address: Option<UntrustedNodeAddress>, - pub rect: Rect<Au>, -} - -impl OffsetParentResponse { - pub fn empty() -> OffsetParentResponse { - OffsetParentResponse { - node_address: None, - rect: Rect::zero(), - } - } -} /// Any query to perform with this reflow. #[derive(PartialEq)] diff --git a/components/script_layout_interface/Cargo.toml b/components/script_layout_interface/Cargo.toml index 79d0c10682c..a4ace11ae26 100644 --- a/components/script_layout_interface/Cargo.toml +++ b/components/script_layout_interface/Cargo.toml @@ -9,8 +9,10 @@ name = "script_layout_interface" path = "lib.rs" [dependencies] +app_units = {version = "0.2.3", features = ["plugins"]} bitflags = "0.7" canvas_traits = {path = "../canvas_traits"} +euclid = {version = "0.6.4", features = ["plugins"]} gfx_traits = {path = "../gfx_traits"} heapsize = "0.3.0" heapsize_plugin = "0.1.2" @@ -19,6 +21,7 @@ libc = "0.2" msg = {path = "../msg"} plugins = {path = "../plugins"} range = {path = "../range"} +script_traits = {path = "../script_traits"} selectors = {version = "0.6", features = ["heap_size"]} string_cache = {version = "0.2.20", features = ["heap_size"]} style = {path = "../style"} diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs index d9037311f6a..123792a6c6f 100644 --- a/components/script_layout_interface/lib.rs +++ b/components/script_layout_interface/lib.rs @@ -14,17 +14,20 @@ #![plugin(heapsize_plugin)] #![plugin(plugins)] +extern crate app_units; #[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate canvas_traits; extern crate core; +extern crate euclid; extern crate gfx_traits; extern crate heapsize; extern crate ipc_channel; extern crate libc; extern crate msg; extern crate range; +extern crate script_traits; extern crate selectors; #[macro_use(atom, ns)] extern crate string_cache; @@ -32,6 +35,7 @@ extern crate style; extern crate url; pub mod restyle_damage; +pub mod rpc; pub mod wrapper_traits; use canvas_traits::CanvasMsg; diff --git a/components/script_layout_interface/rpc.rs b/components/script_layout_interface/rpc.rs new file mode 100644 index 00000000000..21cac2a19c2 --- /dev/null +++ b/components/script_layout_interface/rpc.rs @@ -0,0 +1,96 @@ +/* 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/. */ + +use app_units::Au; +use euclid::point::Point2D; +use euclid::rect::Rect; +use gfx_traits::LayerId; +use script_traits::UntrustedNodeAddress; +use style::properties::longhands::{margin_top, margin_right, margin_bottom, margin_left, overflow_x}; + +/// Synchronous messages that script can send to layout. +/// +/// In general, you should use messages to talk to Layout. Use the RPC interface +/// if and only if the work is +/// +/// 1) read-only with respect to LayoutThreadData, +/// 2) small, +/// 3) and really needs to be fast. +pub trait LayoutRPC { + /// Requests the dimensions of the content box, as in the `getBoundingClientRect()` call. + fn content_box(&self) -> ContentBoxResponse; + /// Requests the dimensions of all the content boxes, as in the `getClientRects()` call. + fn content_boxes(&self) -> ContentBoxesResponse; + /// Requests the geometry of this node. Used by APIs such as `clientTop`. + fn node_geometry(&self) -> NodeGeometryResponse; + /// Requests the overflow-x and overflow-y of this node. Used by `scrollTop` etc. + fn node_overflow(&self) -> NodeOverflowResponse; + /// Requests the scroll geometry of this node. Used by APIs such as `scrollTop`. + fn node_scroll_area(&self) -> NodeGeometryResponse; + /// Requests the layer id of this node. Used by APIs such as `scrollTop` + fn node_layer_id(&self) -> NodeLayerIdResponse; + /// Requests the node containing the point of interest + fn hit_test(&self) -> HitTestResponse; + /// Query layout for the resolved value of a given CSS property + fn resolved_style(&self) -> ResolvedStyleResponse; + fn offset_parent(&self) -> OffsetParentResponse; + /// Query layout for the resolve values of the margin properties for an element. + fn margin_style(&self) -> MarginStyleResponse; + + fn nodes_from_point(&self, point: Point2D<f32>) -> Vec<UntrustedNodeAddress>; +} + +pub struct ContentBoxResponse(pub Rect<Au>); + +pub struct ContentBoxesResponse(pub Vec<Rect<Au>>); + +pub struct NodeGeometryResponse { + pub client_rect: Rect<i32>, +} + +pub struct NodeOverflowResponse(pub Option<Point2D<overflow_x::computed_value::T>>); + +pub struct NodeLayerIdResponse { + pub layer_id: LayerId, +} + +pub struct HitTestResponse { + pub node_address: Option<UntrustedNodeAddress>, +} + +pub struct ResolvedStyleResponse(pub Option<String>); + +#[derive(Clone)] +pub struct OffsetParentResponse { + pub node_address: Option<UntrustedNodeAddress>, + pub rect: Rect<Au>, +} + +impl OffsetParentResponse { + pub fn empty() -> OffsetParentResponse { + OffsetParentResponse { + node_address: None, + rect: Rect::zero(), + } + } +} + +#[derive(Clone)] +pub struct MarginStyleResponse { + pub top: margin_top::computed_value::T, + pub right: margin_right::computed_value::T, + pub bottom: margin_bottom::computed_value::T, + pub left: margin_left::computed_value::T, +} + +impl MarginStyleResponse { + pub fn empty() -> MarginStyleResponse { + MarginStyleResponse { + top: margin_top::computed_value::T::Auto, + right: margin_right::computed_value::T::Auto, + bottom: margin_bottom::computed_value::T::Auto, + left: margin_left::computed_value::T::Auto, + } + } +} diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 91cf4ddbb2f..172aac35d99 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -1931,8 +1931,10 @@ dependencies = [ name = "script_layout_interface" version = "0.0.1" dependencies = [ + "app_units 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1941,6 +1943,7 @@ dependencies = [ "msg 0.0.1", "plugins 0.0.1", "range 0.0.1", + "script_traits 0.0.1", "selectors 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", |