auto merge of #676 : metajack/servo/acid1-all-boxes, r=eric93

This makes acid1 have all 6 boxes show up, and almost correctly positioned.

r? @eric93
This commit is contained in:
bors-servo 2013-08-05 16:54:36 -07:00
commit 1337583878
2 changed files with 15 additions and 4 deletions

View file

@ -401,7 +401,8 @@ impl LayoutTreeBuilder {
let new_generator = match (display, parent_generator.flow, sibling_flow) { let new_generator = match (display, parent_generator.flow, sibling_flow) {
// Floats // Floats
(CSSDisplayBlock, BlockFlow(_), _) if !is_float.is_none() => { (CSSDisplayBlock, BlockFlow(_), _) |
(CSSDisplayBlock, FloatFlow(_), _) if !is_float.is_none() => {
self.create_child_generator(node, parent_generator, Flow_Float(is_float.get())) self.create_child_generator(node, parent_generator, Flow_Float(is_float.get()))
} }
// If we're placing a float after an inline, append the float to the inline flow, // If we're placing a float after an inline, append the float to the inline flow,

View file

@ -63,8 +63,7 @@ impl FloatFlowData {
pub fn bubble_widths_float(@mut self, ctx: &LayoutContext) { pub fn bubble_widths_float(@mut self, ctx: &LayoutContext) {
let mut min_width = Au(0); let mut min_width = Au(0);
let mut pref_width = Au(0); let mut pref_width = Au(0);
let mut num_floats = 1;
self.common.num_floats = 1;
for FloatFlow(self).each_child |child_ctx| { for FloatFlow(self).each_child |child_ctx| {
//assert!(child_ctx.starts_block_flow() || child_ctx.starts_inline_flow()); //assert!(child_ctx.starts_block_flow() || child_ctx.starts_inline_flow());
@ -72,10 +71,14 @@ impl FloatFlowData {
do child_ctx.with_mut_base |child_node| { do child_ctx.with_mut_base |child_node| {
min_width = geometry::max(min_width, child_node.min_width); min_width = geometry::max(min_width, child_node.min_width);
pref_width = geometry::max(pref_width, child_node.pref_width); pref_width = geometry::max(pref_width, child_node.pref_width);
child_node.floats_in = FloatContext::new(child_node.num_floats);
num_floats = num_floats + child_node.num_floats;
} }
} }
self.common.num_floats = num_floats;
self.box.map(|&box| { self.box.map(|&box| {
let style = box.style(); let style = box.style();
do box.with_model |model| { do box.with_model |model| {
@ -162,8 +165,15 @@ impl FloatFlowData {
} }
pub fn assign_height_float(@mut self, ctx: &mut LayoutContext) { pub fn assign_height_float(@mut self, ctx: &mut LayoutContext) {
let mut float_ctx = FloatContext::new(self.common.num_floats);
for FloatFlow(self).each_child |kid| { for FloatFlow(self).each_child |kid| {
do kid.with_mut_base |child_node| {
child_node.floats_in = float_ctx.clone();
}
kid.assign_height(ctx); kid.assign_height(ctx);
do kid.with_mut_base |child_node| {
float_ctx = child_node.floats_out.clone();
}
} }
let mut cur_y = Au(0); let mut cur_y = Au(0);