aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/layout/layout_thread.rs2
-rw-r--r--components/layout/query.rs8
-rw-r--r--components/script/dom/bindings/trace.rs2
-rw-r--r--components/script/dom/window.rs5
-rw-r--r--components/script/layout_interface.rs88
-rw-r--r--components/script_layout_interface/Cargo.toml3
-rw-r--r--components/script_layout_interface/lib.rs4
-rw-r--r--components/script_layout_interface/rpc.rs96
-rw-r--r--components/servo/Cargo.lock3
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",