mirror of
https://github.com/servo/servo.git
synced 2025-06-10 09:33:13 +00:00
Move the remainder of layout_interface into script_layout_interface.
This commit is contained in:
parent
2c50318ee7
commit
9e2e0ff98c
16 changed files with 39 additions and 27 deletions
|
@ -19,6 +19,8 @@ heapsize_plugin = "0.1.2"
|
|||
ipc-channel = {git = "https://github.com/servo/ipc-channel"}
|
||||
libc = "0.2"
|
||||
msg = {path = "../msg"}
|
||||
net_traits = {path = "../net_traits"}
|
||||
profile_traits = {path = "../profile_traits"}
|
||||
plugins = {path = "../plugins"}
|
||||
range = {path = "../range"}
|
||||
script_traits = {path = "../script_traits"}
|
||||
|
@ -26,3 +28,4 @@ selectors = {version = "0.6", features = ["heap_size"]}
|
|||
string_cache = {version = "0.2.20", features = ["heap_size"]}
|
||||
style = {path = "../style"}
|
||||
url = {version = "1.0.0", features = ["heap_size"]}
|
||||
util = {path = "../util"}
|
||||
|
|
|
@ -26,6 +26,8 @@ extern crate heapsize;
|
|||
extern crate ipc_channel;
|
||||
extern crate libc;
|
||||
extern crate msg;
|
||||
extern crate net_traits;
|
||||
extern crate profile_traits;
|
||||
extern crate range;
|
||||
extern crate script_traits;
|
||||
extern crate selectors;
|
||||
|
@ -33,7 +35,9 @@ extern crate selectors;
|
|||
extern crate string_cache;
|
||||
extern crate style;
|
||||
extern crate url;
|
||||
extern crate util;
|
||||
|
||||
pub mod message;
|
||||
pub mod restyle_damage;
|
||||
pub mod rpc;
|
||||
pub mod wrapper_traits;
|
||||
|
|
148
components/script_layout_interface/message.rs
Normal file
148
components/script_layout_interface/message.rs
Normal file
|
@ -0,0 +1,148 @@
|
|||
/* 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::{Epoch, LayerId};
|
||||
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 rpc::LayoutRPC;
|
||||
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::selector_impl::PseudoElement;
|
||||
use style::servo::Stylesheet;
|
||||
use url::Url;
|
||||
use util::ipc::OptionalOpaqueIpcSender;
|
||||
use {OpaqueStyleAndLayoutData, TrustedNodeAddress};
|
||||
|
||||
/// Asynchronous messages that script can send to layout.
|
||||
pub enum Msg {
|
||||
/// Adds the given stylesheet to the document.
|
||||
AddStylesheet(Arc<Stylesheet>),
|
||||
|
||||
/// Puts a document into quirks mode, causing the quirks mode stylesheet to be loaded.
|
||||
SetQuirksMode,
|
||||
|
||||
/// Requests a reflow.
|
||||
Reflow(ScriptReflow),
|
||||
|
||||
/// Get an RPC interface.
|
||||
GetRPC(Sender<Box<LayoutRPC + Send>>),
|
||||
|
||||
/// Requests that the layout thread render the next frame of all animations.
|
||||
TickAnimations,
|
||||
|
||||
/// Requests that the layout thread reflow with a newly-loaded Web font.
|
||||
ReflowWithNewlyLoadedWebFont,
|
||||
|
||||
/// Updates the layout visible rects, affecting the area that display lists will be constructed
|
||||
/// for.
|
||||
SetVisibleRects(Vec<(LayerId, Rect<Au>)>),
|
||||
|
||||
/// Destroys layout data associated with a DOM node.
|
||||
///
|
||||
/// TODO(pcwalton): Maybe think about batching to avoid message traffic.
|
||||
ReapStyleAndLayoutData(OpaqueStyleAndLayoutData),
|
||||
|
||||
/// Requests that the layout thread measure its memory usage. The resulting reports are sent back
|
||||
/// via the supplied channel.
|
||||
CollectReports(ReportsChan),
|
||||
|
||||
/// Requests that the layout thread enter a quiescent state in which no more messages are
|
||||
/// accepted except `ExitMsg`. A response message will be sent on the supplied channel when
|
||||
/// this happens.
|
||||
PrepareToExit(Sender<()>),
|
||||
|
||||
/// Requests that the layout thread immediately shut down. There must be no more nodes left after
|
||||
/// this, or layout will crash.
|
||||
ExitNow,
|
||||
|
||||
/// Get the last epoch counter for this layout thread.
|
||||
GetCurrentEpoch(IpcSender<Epoch>),
|
||||
|
||||
/// Asks the layout thread whether any Web fonts have yet to load (if true, loads are pending;
|
||||
/// false otherwise).
|
||||
GetWebFontLoadState(IpcSender<bool>),
|
||||
|
||||
/// Creates a new layout thread.
|
||||
///
|
||||
/// This basically exists to keep the script-layout dependency one-way.
|
||||
CreateLayoutThread(NewLayoutThreadInfo),
|
||||
|
||||
/// Set the final Url.
|
||||
SetFinalUrl(Url),
|
||||
|
||||
/// Tells layout about the new scrolling offsets of each scrollable stacking context.
|
||||
SetStackingContextScrollStates(Vec<StackingContextScrollState>),
|
||||
}
|
||||
|
||||
|
||||
/// Any query to perform with this reflow.
|
||||
#[derive(PartialEq)]
|
||||
pub enum ReflowQueryType {
|
||||
NoQuery,
|
||||
ContentBoxQuery(TrustedNodeAddress),
|
||||
ContentBoxesQuery(TrustedNodeAddress),
|
||||
NodeOverflowQuery(TrustedNodeAddress),
|
||||
HitTestQuery(Point2D<f32>, bool),
|
||||
NodeGeometryQuery(TrustedNodeAddress),
|
||||
NodeLayerIdQuery(TrustedNodeAddress),
|
||||
NodeScrollGeometryQuery(TrustedNodeAddress),
|
||||
ResolvedStyleQuery(TrustedNodeAddress, Option<PseudoElement>, Atom),
|
||||
OffsetParentQuery(TrustedNodeAddress),
|
||||
MarginStyleQuery(TrustedNodeAddress),
|
||||
}
|
||||
|
||||
/// Information needed for a reflow.
|
||||
pub struct Reflow {
|
||||
/// The goal of reflow: either to render to the screen or to flush layout info for script.
|
||||
pub goal: ReflowGoal,
|
||||
/// A clipping rectangle for the page, an enlarged rectangle containing the viewport.
|
||||
pub page_clip_rect: Rect<Au>,
|
||||
}
|
||||
|
||||
/// Information needed for a script-initiated reflow.
|
||||
pub struct ScriptReflow {
|
||||
/// General reflow data.
|
||||
pub reflow_info: Reflow,
|
||||
/// The document node.
|
||||
pub document: TrustedNodeAddress,
|
||||
/// The document's list of stylesheets.
|
||||
pub document_stylesheets: Vec<Arc<Stylesheet>>,
|
||||
/// Whether the document's stylesheets have changed since the last script reflow.
|
||||
pub stylesheets_changed: bool,
|
||||
/// The current window size.
|
||||
pub window_size: WindowSizeData,
|
||||
/// The channel that we send a notification to.
|
||||
pub script_join_chan: Sender<()>,
|
||||
/// The type of query if any to perform during this reflow.
|
||||
pub query_type: ReflowQueryType,
|
||||
}
|
||||
|
||||
impl Drop for ScriptReflow {
|
||||
fn drop(&mut self) {
|
||||
self.script_join_chan.send(()).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
pub struct NewLayoutThreadInfo {
|
||||
pub id: PipelineId,
|
||||
pub url: Url,
|
||||
pub is_parent: bool,
|
||||
pub layout_pair: (Sender<Msg>, Receiver<Msg>),
|
||||
pub pipeline_port: IpcReceiver<LayoutControlMsg>,
|
||||
pub constellation_chan: IpcSender<ConstellationMsg>,
|
||||
pub panic_chan: IpcSender<PanicMsg>,
|
||||
pub script_chan: IpcSender<ConstellationControlMsg>,
|
||||
pub image_cache_thread: ImageCacheThread,
|
||||
pub paint_chan: OptionalOpaqueIpcSender,
|
||||
pub content_process_shutdown_chan: IpcSender<()>,
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue