aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/layout/layout_task.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-10-15 18:39:23 -0700
committerBrian Anderson <banderson@mozilla.com>2012-10-15 18:39:23 -0700
commit83bb1bda0eb1920fc1d87bd83159eb0b5e572380 (patch)
treed95d3e1d428dec32b02c1e8b43e0eaf274568b0d /src/servo/layout/layout_task.rs
parentfdf7dc1a02d1f4fd5724fd7bfa104b3b3b478c96 (diff)
downloadservo-83bb1bda0eb1920fc1d87bd83159eb0b5e572380.tar.gz
servo-83bb1bda0eb1920fc1d87bd83159eb0b5e572380.zip
Move the contents of BuildMsg to a struct
Diffstat (limited to 'src/servo/layout/layout_task.rs')
-rw-r--r--src/servo/layout/layout_task.rs44
1 files changed, 27 insertions, 17 deletions
diff --git a/src/servo/layout/layout_task.rs b/src/servo/layout/layout_task.rs
index 264962f56ff..78c0e82f8c9 100644
--- a/src/servo/layout/layout_task.rs
+++ b/src/servo/layout/layout_task.rs
@@ -47,11 +47,20 @@ enum LayoutQueryResponse_ {
}
pub enum Msg {
- BuildMsg(Node, ARC<Stylesheet>, Url, pipes::SharedChan<Event>, Size2D<uint>, pipes::Chan<()>),
+ BuildMsg(BuildData),
QueryMsg(LayoutQuery, comm::Chan<LayoutQueryResponse>),
ExitMsg
}
+struct BuildData {
+ node: Node,
+ style: ARC<Stylesheet>,
+ url: Url,
+ dom_event_chan: pipes::SharedChan<Event>,
+ window_size: Size2D<uint>,
+ content_join_chan: pipes::Chan<()>
+}
+
fn LayoutTask(render_task: RenderTask,
img_cache_task: ImageCacheTask) -> LayoutTask {
do spawn_listener::<Msg> |from_content| {
@@ -95,15 +104,11 @@ impl Layout {
fn handle_request() -> bool {
match self.from_content.recv() {
- BuildMsg(move node, move styles, move doc_url,
- move dom_event_chan, move window_size, move join_chan) => {
-
- let styles = Cell(styles);
- let doc_url = Cell(doc_url);
- let join_chan = Cell(join_chan);
+ BuildMsg(move data) => {
+ let data = Cell(data);
do time("layout: performing layout") {
- self.handle_build(node, styles.take(), doc_url.take(), dom_event_chan.clone(), window_size, join_chan.take());
+ self.handle_build(data.take());
}
}
@@ -121,9 +126,14 @@ impl Layout {
true
}
- fn handle_build(node: Node, styles: ARC<Stylesheet>, doc_url: Url,
- dom_event_chan: pipes::SharedChan<Event>, window_size: Size2D<uint>,
- content_join_chan: pipes::Chan<()>) {
+ fn handle_build(data: BuildData) {
+
+ let node = &data.node;
+ // FIXME: Bad copy
+ let doc_url = copy data.url;
+ // FIXME: Bad clone
+ let dom_event_chan = data.dom_event_chan.clone();
+
debug!("layout: received layout request for: %s", doc_url.to_str());
debug!("layout: parsed Node tree");
debug!("%?", node.dump());
@@ -131,8 +141,8 @@ impl Layout {
// Reset the image cache
self.local_image_cache.next_round(self.make_on_image_available_cb(move dom_event_chan));
- let screen_size = Size2D(au::from_px(window_size.width as int),
- au::from_px(window_size.height as int));
+ let screen_size = Size2D(au::from_px(data.window_size.width as int),
+ au::from_px(data.window_size.height as int));
let layout_ctx = LayoutContext {
image_cache: self.local_image_cache,
@@ -144,13 +154,13 @@ impl Layout {
let layout_root: @FlowContext = do time("layout: tree construction") {
// TODO: this is dumb. we don't need 3 separate traversals.
node.initialize_style_for_subtree(&layout_ctx, &self.layout_refs);
- node.recompute_style_for_subtree(&layout_ctx, &styles);
+ node.recompute_style_for_subtree(&layout_ctx, &data.style);
/* resolve styles (convert relative values) down the node tree */
- apply_style(&layout_ctx, node);
+ apply_style(&layout_ctx, *node);
let builder = LayoutTreeBuilder();
let layout_root: @FlowContext = match builder.construct_trees(&layout_ctx,
- node) {
+ *node) {
Ok(root) => root,
Err(*) => fail ~"Root flow should always exist"
};
@@ -187,7 +197,7 @@ impl Layout {
} // time(layout: display list building)
// Tell content we're done
- content_join_chan.send(());
+ data.content_join_chan.send(());
}