aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/flex.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-08-29 19:15:59 -0500
committerGitHub <noreply@github.com>2017-08-29 19:15:59 -0500
commit7e363d60bb201a526eeebefbd57844cb1f070354 (patch)
tree6ea5f42b6da287dfea189c4b0118eede9b188bad /components/layout/flex.rs
parent473934c989c94773c38f585b1c4500cd8c811738 (diff)
parent9103743d0c55ef405599f3ea4170b6d1c5e4d00b (diff)
downloadservo-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 -->
Diffstat (limited to 'components/layout/flex.rs')
-rw-r--r--components/layout/flex.rs33
1 files changed, 25 insertions, 8 deletions
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();
+ }
}
}