Move the box builder to a separate module

This commit is contained in:
Patrick Walton 2012-05-10 14:03:41 -07:00
parent 6340a4a0bd
commit 624d77b2ff
4 changed files with 45 additions and 27 deletions

View file

@ -50,28 +50,6 @@ impl of tree::wr_tree_ops<@box> for btree {
}
}
fn new_box(n: node) -> @box {
@box({tree: tree::empty(),
node: n,
mut display: di_block,
mut bounds: geom::zero_rect_au()})
}
fn linked_box(n: node) -> @box {
let b = new_box(n);
n.set_aux(b);
ret b;
}
fn linked_subtree(p: node) -> @box {
let p_box = linked_box(p);
for ntree.each_child(p) { |c|
let c_box = linked_subtree(c);
btree.add_child(p_box, c_box);
}
ret p_box;
}
impl block_layout_methods for @box {
#[doc="The main reflow routine."]
fn reflow(available_width: au) {

View file

@ -0,0 +1,39 @@
#[doc="Creates CSS boxes from a DOM."]
import dom::base::node;
import dom::rcu::reader_methods;
import gfx::geom;
import /*layout::*/base::{box, btree, di_block, di_inline, ntree, rd_tree_ops};
import /*layout::*/base::wr_tree_ops;
import util::tree;
export box_builder_methods;
fn new_box(n: node) -> @box {
@box({tree: tree::empty(),
node: n,
mut display: di_block,
mut bounds: geom::zero_rect_au()})
}
impl box_builder_priv_methods for node {
fn construct_boxes() -> @box {
let b = new_box(self);
self.set_aux(b);
ret b;
}
}
impl box_builder_methods for node {
#[doc="Creates boxes for a subtree. This is the entry point."]
fn construct_boxes_for_subtree() -> @box {
let p_box = self.construct_boxes();
for ntree.each_child(self) {
|c|
let c_box = c.construct_boxes_for_subtree();
btree.add_child(p_box, c_box);
}
ret p_box;
}
}

View file

@ -11,8 +11,8 @@ import gfx::geom;
import gfx::renderer;
import dom::base::node;
import dom::rcu::scope;
import base::{btree, rd_tree_ops, wr_tree_ops, linked_subtree};
import base::block_layout_methods;
import base::*;
import box_builder::box_builder_methods;
import dl = display_list;
enum msg {
@ -29,9 +29,9 @@ fn layout(to_renderer: chan<renderer::msg>) -> chan<msg> {
exit { break; }
build(node) {
#debug("layout: received layout request");
let box = linked_subtree(node);
box.reflow(geom::px_to_au(800));
let dlist = build_display_list(box);
let this_box = node.construct_boxes_for_subtree();
this_box.reflow(geom::px_to_au(800));
let dlist = build_display_list(this_box);
to_renderer.send(renderer::render(dlist));
}
}

View file

@ -31,6 +31,7 @@ mod image {
mod layout {
mod base;
mod box_builder;
mod display_list;
mod inline;
mod layout;