Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make box_ not Option in block flows.(fixes #2012) #2020

Merged
merged 1 commit into from Apr 10, 2014
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Large diffs are not rendered by default.

@@ -241,9 +241,7 @@ impl Flow for TableFlow {
let child_base = flow::mut_base(kid);
num_floats = num_floats + child_base.num_floats;
}
for box_ in self.block_flow.box_.iter() {
box_.compute_borders(box_.style());
}
self.block_flow.box_.compute_borders(self.block_flow.box_.style());
self.block_flow.base.num_floats = num_floats;
self.block_flow.base.intrinsic_widths.minimum_width = min_width;
self.block_flow.base.intrinsic_widths.preferred_width = geometry::max(min_width, pref_width);
@@ -256,8 +254,6 @@ impl Flow for TableFlow {

// The position was set to the containing block by the flow's parent.
let containing_block_width = self.block_flow.base.position.size.width;
let mut left_content_edge = Au::new(0);
let mut content_width = containing_block_width;

let mut num_unspecified_widths = 0;
let mut total_column_width = Au::new(0);
@@ -272,12 +268,10 @@ impl Flow for TableFlow {
let width_computer = InternalTable;
width_computer.compute_used_width(&mut self.block_flow, ctx, containing_block_width);

for box_ in self.block_flow.box_.iter() {
left_content_edge = box_.padding.get().left + box_.border.get().left;
let padding_and_borders = box_.padding.get().left + box_.padding.get().right +
box_.border.get().left + box_.border.get().right;
content_width = box_.border_box.get().size.width - padding_and_borders;
}
let left_content_edge = self.block_flow.box_.padding.get().left + self.block_flow.box_.border.get().left;
let padding_and_borders = self.block_flow.box_.padding.get().left + self.block_flow.box_.padding.get().right +
self.block_flow.box_.border.get().left + self.block_flow.box_.border.get().right;
let content_width = self.block_flow.box_.border_box.get().size.width - padding_and_borders;

match self.table_layout {
FixedLayout => {
@@ -319,10 +313,7 @@ impl Flow for TableFlow {

fn debug_str(&self) -> ~str {
let txt = ~"TableFlow: ";
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}

@@ -78,9 +78,6 @@ impl Flow for TableCaptionFlow {

fn debug_str(&self) -> ~str {
let txt = ~"TableCaptionFlow: ";
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}
@@ -35,7 +35,7 @@ impl TableCellFlow {
self.block_flow.teardown()
}

pub fn box_<'a>(&'a mut self) -> &'a Option<Box>{
pub fn box_<'a>(&'a mut self) -> &'a Box {
&self.block_flow.box_
}

@@ -77,17 +77,15 @@ impl Flow for TableCellFlow {
/// Minimum/preferred widths set by this function are used in automatic table layout calculation.
fn bubble_widths(&mut self, ctx: &mut LayoutContext) {
self.block_flow.bubble_widths(ctx);
for box_ in self.block_flow.box_.iter() {
let specified_width = MaybeAuto::from_style(box_.style().Box.get().width,
Au::new(0)).specified_or_zero();
if self.block_flow.base.intrinsic_widths.minimum_width < specified_width {
self.block_flow.base.intrinsic_widths.minimum_width = specified_width;
}
if self.block_flow.base.intrinsic_widths.preferred_width <
self.block_flow.base.intrinsic_widths.minimum_width {
self.block_flow.base.intrinsic_widths.preferred_width =
self.block_flow.base.intrinsic_widths.minimum_width;
}
let specified_width = MaybeAuto::from_style(self.block_flow.box_.style().Box.get().width,
Au::new(0)).specified_or_zero();
if self.block_flow.base.intrinsic_widths.minimum_width < specified_width {
self.block_flow.base.intrinsic_widths.minimum_width = specified_width;
}
if self.block_flow.base.intrinsic_widths.preferred_width <
self.block_flow.base.intrinsic_widths.minimum_width {
self.block_flow.base.intrinsic_widths.preferred_width =
self.block_flow.base.intrinsic_widths.minimum_width;
}
}

@@ -98,18 +96,14 @@ impl Flow for TableCellFlow {

// The position was set to the column width by the parent flow, table row flow.
let containing_block_width = self.block_flow.base.position.size.width;
let mut left_content_edge = Au::new(0);
let mut content_width = containing_block_width;

let width_computer = InternalTable;
width_computer.compute_used_width(&mut self.block_flow, ctx, containing_block_width);

for box_ in self.block_flow.box_.iter() {
left_content_edge = box_.border_box.get().origin.x + box_.padding.get().left + box_.border.get().left;
let padding_and_borders = box_.padding.get().left + box_.padding.get().right +
box_.border.get().left + box_.border.get().right;
content_width = box_.border_box.get().size.width - padding_and_borders;
}
let left_content_edge = self.block_flow.box_.border_box.get().origin.x + self.block_flow.box_.padding.get().left + self.block_flow.box_.border.get().left;
let padding_and_borders = self.block_flow.box_.padding.get().left + self.block_flow.box_.padding.get().right +
self.block_flow.box_.border.get().left + self.block_flow.box_.border.get().right;
let content_width = self.block_flow.box_.border_box.get().size.width - padding_and_borders;

self.block_flow.propagate_assigned_width_to_children(left_content_edge, content_width, None);
}
@@ -130,10 +124,7 @@ impl Flow for TableCellFlow {

fn debug_str(&self) -> ~str {
let txt = ~"TableCellFlow: ";
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}

@@ -64,7 +64,7 @@ impl TableRowFlow {
self.col_pref_widths = ~[];
}

pub fn box_<'a>(&'a mut self) -> &'a Option<Box>{
pub fn box_<'a>(&'a mut self) -> &'a Box {
&self.block_flow.box_
}

@@ -93,7 +93,8 @@ impl TableRowFlow {
kid.assign_height_inorder(layout_context)
}

for child_box in kid.as_table_cell().box_().iter() {
{
let child_box = kid.as_table_cell().box_();
// TODO: Percentage height
let child_specified_height = MaybeAuto::from_style(child_box.style().Box.get().height,
Au::new(0)).specified_or_zero();
@@ -105,28 +106,25 @@ impl TableRowFlow {
}

let mut height = max_y;
for box_ in self.block_flow.box_.iter() {
// TODO: Percentage height
height = match MaybeAuto::from_style(box_.style().Box.get().height, Au(0)) {
Auto => height,
Specified(value) => geometry::max(value, height)
};
}
// TODO: Percentage height
height = match MaybeAuto::from_style(self.block_flow.box_.style().Box.get().height, Au(0)) {
Auto => height,
Specified(value) => geometry::max(value, height)
};
// cur_y = cur_y + height;

// Assign the height of own box
//
// FIXME(pcwalton): Take `cur_y` into account.
for box_ in self.block_flow.box_.iter() {
let mut position = box_.border_box.get();
position.size.height = height;
box_.border_box.set(position);
}
let mut position = self.block_flow.box_.border_box.get();
position.size.height = height;
self.block_flow.box_.border_box.set(position);
self.block_flow.base.position.size.height = height;

// Assign the height of kid boxes, which is the same value as own height.
for kid in self.block_flow.base.child_iter() {
for kid_box_ in kid.as_table_cell().box_().iter() {
{
let kid_box_ = kid.as_table_cell().box_();
let mut position = kid_box_.border_box.get();
position.size.height = height;
kid_box_.border_box.set(position);
@@ -185,7 +183,8 @@ impl Flow for TableRowFlow {
assert!(kid.is_table_cell());

// collect the specified column widths of cells. These are used in fixed table layout calculation.
for child_box in kid.as_table_cell().box_().iter() {
{
let child_box = kid.as_table_cell().box_();
let child_specified_width = MaybeAuto::from_style(child_box.style().Box.get().width,
Au::new(0)).specified_or_zero();
self.col_widths.push(child_specified_width);
@@ -237,10 +236,7 @@ impl Flow for TableRowFlow {

fn debug_str(&self) -> ~str {
let txt = ~"TableRowFlow: ";
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}

@@ -63,7 +63,7 @@ impl TableRowGroupFlow {
self.col_pref_widths = ~[];
}

pub fn box_<'a>(&'a mut self) -> &'a Option<Box>{
pub fn box_<'a>(&'a mut self) -> &'a Box {
&self.block_flow.box_
}

@@ -93,11 +93,9 @@ impl TableRowGroupFlow {

let height = cur_y - top_offset;

for box_ in self.block_flow.box_.iter() {
let mut position = box_.border_box.get();
position.size.height = height;
box_.border_box.set(position);
}
let mut position = self.block_flow.box_.border_box.get();
position.size.height = height;
self.block_flow.box_.border_box.set(position);
self.block_flow.base.position.size.height = height;
}

@@ -219,10 +217,7 @@ impl Flow for TableRowGroupFlow {

fn debug_str(&self) -> ~str {
let txt = ~"TableRowGroupFlow: ";
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}

@@ -166,16 +166,12 @@ impl Flow for TableWrapperFlow {

// The position was set to the containing block by the flow's parent.
let containing_block_width = self.block_flow.base.position.size.width;
let mut left_content_edge = Au::new(0);
let mut content_width = containing_block_width;

let width_computer = TableWrapper;
width_computer.compute_used_width_table_wrapper(self, ctx, containing_block_width);

for box_ in self.block_flow.box_.iter() {
left_content_edge = box_.border_box.get().origin.x;
content_width = box_.border_box.get().size.width;
}
let left_content_edge = self.block_flow.box_.border_box.get().origin.x;
let content_width = self.block_flow.box_.border_box.get().size.width;

match self.table_layout {
FixedLayout | _ if self.is_float() =>
@@ -221,10 +217,7 @@ impl Flow for TableWrapperFlow {
} else {
~"TableWrapperFlow: "
};
txt.append(match self.block_flow.box_ {
Some(ref rb) => rb.debug_str(),
None => ~"",
})
txt.append(self.block_flow.box_.debug_str())
}
}

@@ -258,23 +251,21 @@ impl TableWrapper {
|sum, width| sum.add(width));

let mut computed_width = input.computed_width.specified_or_zero();
for box_ in table_wrapper.block_flow.box_.iter() {
let style = box_.style();

// Get left and right paddings, borders for table.
// We get these values from the box's style since table_wrapper doesn't have it's own border or padding.
// input.available_width is same as containing_block_width in table_wrapper.
let padding_left = specified(style.Padding.get().padding_left,
input.available_width);
let padding_right = specified(style.Padding.get().padding_right,
input.available_width);
let border_left = style.Border.get().border_left_width;
let border_right = style.Border.get().border_right_width;
let padding_and_borders = padding_left + padding_right + border_left + border_right;
// Compare border-edge widths. Because fixed_cells_width indicates content-width,
// padding and border values are added to fixed_cells_width.
computed_width = geometry::max(fixed_cells_width + padding_and_borders, computed_width);
}
let style = table_wrapper.block_flow.box_.style();

// Get left and right paddings, borders for table.
// We get these values from the box's style since table_wrapper doesn't have it's own border or padding.
// input.available_width is same as containing_block_width in table_wrapper.
let padding_left = specified(style.Padding.get().padding_left,
input.available_width);
let padding_right = specified(style.Padding.get().padding_right,
input.available_width);
let border_left = style.Border.get().border_left_width;
let border_right = style.Border.get().border_right_width;
let padding_and_borders = padding_left + padding_right + border_left + border_right;
// Compare border-edge widths. Because fixed_cells_width indicates content-width,
// padding and border values are added to fixed_cells_width.
computed_width = geometry::max(fixed_cells_width + padding_and_borders, computed_width);
computed_width
},
AutoLayout => {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.