diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-08-29 19:15:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-29 19:15:59 -0500 |
commit | 7e363d60bb201a526eeebefbd57844cb1f070354 (patch) | |
tree | 6ea5f42b6da287dfea189c4b0118eede9b188bad | |
parent | 473934c989c94773c38f585b1c4500cd8c811738 (diff) | |
parent | 9103743d0c55ef405599f3ea4170b6d1c5e4d00b (diff) | |
download | servo-7e363d60bb201a526eeebefbd57844cb1f070354.tar.gz servo-7e363d60bb201a526eeebefbd57844cb1f070354.zip |
Auto merge of #18175 - stshine:no-floats-in-flexbox, r=mbrubeck
layout: Stop call normal block size assignment for flex container
No need to call the `assign_block_size_block_base()` method of normal block in flex.rs since it is implemented for CSS2.
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #14813 (github issue number if applicable).
<!-- Either: -->
- [X] There are tests for these changes
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18175)
<!-- Reviewable:end -->
16 files changed, 29 insertions, 50 deletions
diff --git a/components/layout/block.rs b/components/layout/block.rs index 6124492dca7..379b4f7fdea 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 db7fc0a9344..14e02aa6fb2 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; @@ -27,6 +28,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 @@ -804,7 +806,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; - } } @@ -941,13 +942,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 67976ed0a64..f4c545ec730 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 |