aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglennw <glennw@users.noreply.github.com>2014-09-13 18:55:56 +1000
committerglennw <glennw@users.noreply.github.com>2014-09-13 18:55:56 +1000
commitfb54c1eb08839f43a15df30cf241c21b03c4beeb (patch)
treebabbea012e33d63d029ba135cddb750baa0c33f0
parent25f263b7516e7accc569b5a045ff9bf23c56f8a7 (diff)
parent0e60c878f6ffc11d2ec564d19a8fce8a24d214f2 (diff)
downloadservo-fb54c1eb08839f43a15df30cf241c21b03c4beeb.tar.gz
servo-fb54c1eb08839f43a15df30cf241c21b03c4beeb.zip
Merge pull request #3305 from glennw/float-table
Add support for tables that are floated.
-rw-r--r--components/layout/construct.rs22
-rw-r--r--tests/ref/basic.list1
-rw-r--r--tests/ref/float_table_a.html35
-rw-r--r--tests/ref/float_table_ref.html22
4 files changed, 76 insertions, 4 deletions
diff --git a/components/layout/construct.rs b/components/layout/construct.rs
index d48612375d4..466a254237d 100644
--- a/components/layout/construct.rs
+++ b/components/layout/construct.rs
@@ -684,7 +684,8 @@ impl<'a, 'b> FlowConstructor<'a, 'b> {
/// Builds a flow for a node with `display: table`. This yields a `TableWrapperFlow` with possibly
/// other `TableCaptionFlow`s or `TableFlow`s underneath it.
- fn build_flow_for_table_wrapper(&mut self, node: &ThreadSafeLayoutNode) -> ConstructionResult {
+ fn build_flow_for_table_wrapper(&mut self, node: &ThreadSafeLayoutNode,
+ float_value: float::T) -> ConstructionResult {
let fragment = Fragment::new_from_specific_info(node, TableWrapperFragment);
let wrapper_flow = box TableWrapperFlow::from_node_and_fragment(node, fragment);
let mut wrapper_flow = FlowRef::new(wrapper_flow as Box<Flow>);
@@ -734,7 +735,20 @@ impl<'a, 'b> FlowConstructor<'a, 'b> {
abs_descendants.push(wrapper_flow.clone());
}
}
- FlowConstructionResult(wrapper_flow, abs_descendants)
+
+ match float_value {
+ float::none => {
+ FlowConstructionResult(wrapper_flow, abs_descendants)
+ }
+ _ => {
+ let float_kind = FloatKind::from_property(float_value);
+ let float_flow = box BlockFlow::float_from_node(self, node, float_kind) as Box<Flow>;
+ let mut float_flow = FlowRef::new(float_flow);
+ float_flow.add_new_child(wrapper_flow);
+ float_flow.finish(self.layout_context);
+ FlowConstructionResult(float_flow, abs_descendants)
+ }
+ }
}
/// Builds a flow for a node with `display: table-caption`. This yields a `TableCaptionFlow`
@@ -858,8 +872,8 @@ impl<'a, 'b> PostorderNodeMutTraversal for FlowConstructor<'a, 'b> {
}
// Table items contribute table flow construction results.
- (display::table, _, _) => {
- let construction_result = self.build_flow_for_table_wrapper(node);
+ (display::table, float_value, _) => {
+ let construction_result = self.build_flow_for_table_wrapper(node, float_value);
node.set_flow_construction_result(construction_result)
}
diff --git a/tests/ref/basic.list b/tests/ref/basic.list
index 7c26bc7b2e1..dcacbaef88a 100644
--- a/tests/ref/basic.list
+++ b/tests/ref/basic.list
@@ -122,3 +122,4 @@ flaky_gpu,flaky_linux == acid2_noscroll.html acid2_ref_broken.html
== inline_block_margin_a.html inline_block_margin_ref.html
== inline_block_img_a.html inline_block_img_ref.html
== inline_block_baseline_a.html inline_block_baseline_ref.html
+== float_table_a.html float_table_ref.html
diff --git a/tests/ref/float_table_a.html b/tests/ref/float_table_a.html
new file mode 100644
index 00000000000..7c3517563eb
--- /dev/null
+++ b/tests/ref/float_table_a.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <meta charset="UTF-8">
+ <style type="text/css">
+ @font-face {
+ font-family: 'ahem';
+ src: url(fonts/ahem/ahem.ttf);
+ }
+ body {
+ margin: 0;
+ }
+ table {
+ font-family: 'ahem';
+ font-size: 100px;
+ color: red;
+ float: right;
+ line-height: 1;
+ }
+ td {
+ padding: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <table>
+ <tbody>
+ <tr>
+ <td>X</td>
+ </tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/tests/ref/float_table_ref.html b/tests/ref/float_table_ref.html
new file mode 100644
index 00000000000..78d1f44fddd
--- /dev/null
+++ b/tests/ref/float_table_ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <meta charset="UTF-8">
+ <style type="text/css">
+ body {
+ margin: 0;
+ }
+ div {
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ position: absolute;
+ right: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <div></div>
+ </body>
+</html>