aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/block.rs3
-rw-r--r--components/layout/flex.rs33
-rw-r--r--components/layout/flow.rs4
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox-margin-auto-horiz-002.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_item-float.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow-automatic.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-abspos.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-float.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-inline-block.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-cell.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row-group.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-flexbox-1_dev/html/flexible-box-float.htm.ini3
16 files changed, 29 insertions, 50 deletions
diff --git a/components/layout/block.rs b/components/layout/block.rs
index d868e1fe914..9a2df7454fd 100644
--- a/components/layout/block.rs
+++ b/components/layout/block.rs
@@ -1429,6 +1429,9 @@ impl BlockFlow {
/// Determines the type of formatting context this is. See the definition of
/// `FormattingContextType`.
pub fn formatting_context_type(&self) -> FormattingContextType {
+ if self.is_inline_flex_item() || self.is_block_flex_item() {
+ return FormattingContextType::Other
+ }
let style = self.fragment.style();
if style.get_box().float != float::T::none {
return FormattingContextType::Other
diff --git a/components/layout/flex.rs b/components/layout/flex.rs
index 24a377483d1..83a2d4e0493 100644
--- a/components/layout/flex.rs
+++ b/components/layout/flex.rs
@@ -7,7 +7,7 @@
#![deny(unsafe_code)]
use app_units::{Au, MAX_AU};
-use block::{BlockFlow, MarginsMayCollapseFlag};
+use block::{AbsoluteAssignBSizesTraversal, BlockFlow, MarginsMayCollapseFlag};
use context::LayoutContext;
use display_list_builder::{DisplayListBuildState, FlexFlowDisplayListBuilding};
use euclid::Point2D;
@@ -17,6 +17,7 @@ use flow::{Flow, FlowClass, ImmutableFlowUtils, OpaqueFlow};
use flow::{INLINE_POSITION_IS_STATIC, IS_ABSOLUTELY_POSITIONED};
use fragment::{Fragment, FragmentBorderBoxIterator, Overflow};
use layout_debug;
+use model::{AdjoiningMargins, CollapsibleMargins};
use model::{IntrinsicISizes, MaybeAuto, SizeConstraint};
use std::cmp::{max, min};
use std::ops::Range;
@@ -28,6 +29,7 @@ use style::servo::restyle_damage::{REFLOW, REFLOW_OUT_OF_FLOW};
use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto, LengthOrPercentageOrNone};
use style::values::computed::flex::FlexBasis;
use style::values::generics::flex::FlexBasis as GenericFlexBasis;
+use traversal::PreorderFlowTraversal;
/// The size of an axis. May be a specified size, a min/max
/// constraint, or an unlimited size
@@ -802,7 +804,6 @@ impl FlexFlow {
let total_block_size = total_cross_size + self.block_flow.fragment.border_padding.block_start_end();
self.block_flow.fragment.border_box.size.block = total_block_size;
self.block_flow.base.position.size.block = total_block_size;
-
}
}
@@ -939,13 +940,29 @@ impl Flow for FlexFlow {
}
fn assign_block_size(&mut self, layout_context: &LayoutContext) {
- self.block_flow
- .assign_block_size_block_base(layout_context,
- None,
- MarginsMayCollapseFlag::MarginsMayNotCollapse);
match self.main_mode {
- Direction::Inline => self.inline_mode_assign_block_size(layout_context),
- Direction::Block => self.block_mode_assign_block_size(),
+ Direction::Inline => {
+ self.inline_mode_assign_block_size(layout_context);
+ let block_start = AdjoiningMargins::from_margin(self.block_flow.fragment.margin.block_start);
+ let block_end = AdjoiningMargins::from_margin(self.block_flow.fragment.margin.block_end);
+ self.block_flow.base.collapsible_margins = CollapsibleMargins::Collapse(block_start, block_end);
+
+ // TODO(stshine): assign proper static position for absolute descendants.
+ if (&*self as &Flow).contains_roots_of_absolute_flow_tree() {
+ // Assign block-sizes for all flows in this absolute flow tree.
+ // This is preorder because the block-size of an absolute flow may depend on
+ // the block-size of its containing block, which may also be an absolute flow.
+ let assign_abs_b_sizes = AbsoluteAssignBSizesTraversal(layout_context.shared_context());
+ assign_abs_b_sizes.traverse_absolute_flows(&mut *self);
+ }
+ }
+ Direction::Block =>{
+ self.block_flow
+ .assign_block_size_block_base(layout_context,
+ None,
+ MarginsMayCollapseFlag::MarginsMayNotCollapse);
+ self.block_mode_assign_block_size();
+ }
}
}
diff --git a/components/layout/flow.rs b/components/layout/flow.rs
index b683dd0d2d1..47a41b4c883 100644
--- a/components/layout/flow.rs
+++ b/components/layout/flow.rs
@@ -1279,9 +1279,7 @@ impl<'a> ImmutableFlowUtils for &'a Flow {
return Some(base(kid).position.start.b + baseline_offset)
}
}
- if kid.is_block_like() &&
- kid.as_block().formatting_context_type() == FormattingContextType::None &&
- !base(kid).flags.contains(IS_ABSOLUTELY_POSITIONED) {
+ if kid.is_block_like() && !base(kid).flags.contains(IS_ABSOLUTELY_POSITIONED) {
if let Some(baseline_offset) = kid.baseline_offset_of_last_line_box_in_flow() {
return Some(base(kid).position.start.b + baseline_offset)
}
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox-margin-auto-horiz-002.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox-margin-auto-horiz-002.htm.ini
deleted file mode 100644
index d771ac4c187..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox-margin-auto-horiz-002.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox-margin-auto-horiz-002.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_item-float.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_item-float.htm.ini
deleted file mode 100644
index a1d3dfb4219..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_item-float.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_item-float.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow-automatic.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow-automatic.htm.ini
deleted file mode 100644
index 20af5d4ca98..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow-automatic.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_rowspan-overflow-automatic.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow.htm.ini
deleted file mode 100644
index cacdba89ec6..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan-overflow.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_rowspan-overflow.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan.htm.ini
deleted file mode 100644
index f0b1e3275bc..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_rowspan.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_rowspan.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-abspos.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-abspos.htm.ini
deleted file mode 100644
index e688e9607d5..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-abspos.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-abspos.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-float.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-float.htm.ini
deleted file mode 100644
index 8926f90bdff..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-float.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-float.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-inline-block.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-inline-block.htm.ini
deleted file mode 100644
index 8ec9d957369..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-inline-block.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-inline-block.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-cell.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-cell.htm.ini
deleted file mode 100644
index faf6a85ac74..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-cell.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-table-cell.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row-group.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row-group.htm.ini
deleted file mode 100644
index afae53a3198..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row-group.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-table-row-group.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row.htm.ini
deleted file mode 100644
index 57c99c472e3..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table-row.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-table-row.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table.htm.ini
deleted file mode 100644
index 451ba65f7c4..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_stf-table.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexbox_stf-table.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexible-box-float.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexible-box-float.htm.ini
deleted file mode 100644
index e925483a90d..00000000000
--- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexible-box-float.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[flexible-box-float.htm]
- type: reftest
- expected: FAIL