layout: Don't use the block container inline size as the initial

computed table inline size.

Makes google.com fully centered.
This commit is contained in:
Patrick Walton 2015-08-03 20:03:12 -07:00
parent 0565df8596
commit 04928bf1e3
6 changed files with 114 additions and 4 deletions

View file

@ -216,6 +216,12 @@ impl TableWrapperFlow {
|accumulator, intermediate_column_inline_sizes| {
accumulator + intermediate_column_inline_sizes.size
});
let preferred_width_of_all_columns =
self.column_intrinsic_inline_sizes.iter()
.fold(border_padding + spacing,
|accumulator, column_intrinsic_inline_sizes| {
accumulator + column_intrinsic_inline_sizes.preferred
});
// Delegate to the appropriate inline size computer to find the constraint inputs and write
// the constraint solutions in.
@ -223,6 +229,7 @@ impl TableWrapperFlow {
if self.block_flow.base.flags.is_float() {
let inline_size_computer = FloatedTable {
minimum_width_of_all_columns: minimum_width_of_all_columns,
preferred_width_of_all_columns: preferred_width_of_all_columns,
border_collapse: border_collapse,
};
let input =
@ -241,6 +248,7 @@ impl TableWrapperFlow {
let inline_size_computer = Table {
minimum_width_of_all_columns: minimum_width_of_all_columns,
preferred_width_of_all_columns: preferred_width_of_all_columns,
border_collapse: border_collapse,
};
let input =
@ -703,13 +711,14 @@ struct IntermediateColumnInlineSize {
fn initial_computed_inline_size(block: &mut BlockFlow,
containing_block_inline_size: Au,
minimum_width_of_all_columns: Au)
minimum_width_of_all_columns: Au,
preferred_width_of_all_columns: Au)
-> MaybeAuto {
let inline_size_from_style = MaybeAuto::from_style(block.fragment.style.content_inline_size(),
containing_block_inline_size);
match inline_size_from_style {
MaybeAuto::Auto => {
MaybeAuto::Specified(max(containing_block_inline_size, minimum_width_of_all_columns))
MaybeAuto::Specified(min(containing_block_inline_size, preferred_width_of_all_columns))
}
MaybeAuto::Specified(inline_size_from_style) => {
MaybeAuto::Specified(max(inline_size_from_style, minimum_width_of_all_columns))
@ -719,6 +728,7 @@ fn initial_computed_inline_size(block: &mut BlockFlow,
struct Table {
minimum_width_of_all_columns: Au,
preferred_width_of_all_columns: Au,
border_collapse: border_collapse::T,
}
@ -739,7 +749,8 @@ impl ISizeAndMarginsComputer for Table {
layout_context);
initial_computed_inline_size(block,
containing_block_inline_size,
self.minimum_width_of_all_columns)
self.minimum_width_of_all_columns,
self.preferred_width_of_all_columns)
}
fn solve_inline_size_constraints(&self,
@ -752,6 +763,7 @@ impl ISizeAndMarginsComputer for Table {
struct FloatedTable {
minimum_width_of_all_columns: Au,
preferred_width_of_all_columns: Au,
border_collapse: border_collapse::T,
}
@ -772,7 +784,8 @@ impl ISizeAndMarginsComputer for FloatedTable {
layout_context);
initial_computed_inline_size(block,
containing_block_inline_size,
self.minimum_width_of_all_columns)
self.minimum_width_of_all_columns,
self.preferred_width_of_all_columns)
}
fn solve_inline_size_constraints(&self,

View file

@ -284,6 +284,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
== table_caption_bottom_a.html table_caption_bottom_ref.html
== table_caption_top_a.html table_caption_top_ref.html
== table_cell_float_a.html table_cell_float_ref.html
== table_center_a.html table_center_ref.html
== table_colspan_fixed_a.html table_colspan_fixed_ref.html
== table_colspan_simple_a.html table_colspan_simple_ref.html
== table_containing_block_a.html table_containing_block_ref.html
@ -294,6 +295,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
== table_padding_a.html table_padding_ref.html
== table_percentage_capping_a.html table_percentage_capping_ref.html
== table_percentage_width_a.html table_percentage_width_ref.html
== table_preferred_width_a.html table_preferred_width_ref.html
== table_row_direction_a.html table_row_direction_ref.html
== table_width_attribute_a.html table_width_attribute_ref.html
== text_align_complex_a.html text_align_complex_ref.html

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<style>
body, html {
margin: 0;
}
</style>
<body>
<center><table border=0 cellspacing=0><tr><td style="border: none; padding: 0; height: 100px; width: 100px; background: green"></td></tr></table></center>
</body>
</html>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<style>
body, html {
margin: 0;
}
</style>
<body>
<center><div style="height: 100px; width: 100px; background: green"></div></center>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<style>
#a {
width: 500px;
}
table, table * {
border: none;
border-spacing: 0;
padding: 0;
}
</style>
<div id=a><table><td>
Hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
</td></table></div>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<style>
#a {
width: 500px;
}
table, table * {
border: none;
border-spacing: 0;
padding: 0;
}
</style>
<div id=a>
Hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
</div>