flexbox 2020: Store align_items on FlexContext

This commit is contained in:
Manish Goregaokar 2020-07-20 13:17:04 -07:00
parent 6914c51195
commit 63ac4d165c

View file

@ -19,6 +19,8 @@ use crate::style_ext::ComputedValuesExt;
use crate::ContainingBlock; use crate::ContainingBlock;
use atomic_refcell::AtomicRefMut; use atomic_refcell::AtomicRefMut;
use std::cell::Cell; use std::cell::Cell;
use style::properties::longhands::align_items::computed_value::T as AlignItems;
use style::properties::longhands::align_self::computed_value::T as AlignSelf;
use style::properties::longhands::box_sizing::computed_value::T as BoxSizing; use style::properties::longhands::box_sizing::computed_value::T as BoxSizing;
use style::properties::longhands::flex_direction::computed_value::T as FlexDirection; use style::properties::longhands::flex_direction::computed_value::T as FlexDirection;
use style::properties::longhands::flex_wrap::computed_value::T as FlexWrap; use style::properties::longhands::flex_wrap::computed_value::T as FlexWrap;
@ -44,6 +46,7 @@ struct FlexContext<'a> {
flex_axis: FlexAxis, flex_axis: FlexAxis,
main_start_cross_start_sides_are: MainStartCrossStart, main_start_cross_start_sides_are: MainStartCrossStart,
container_definite_inner_size: FlexRelativeVec2<Option<Length>>, container_definite_inner_size: FlexRelativeVec2<Option<Length>>,
align_items: AlignItems,
} }
/// A flex item with some intermediate results /// A flex item with some intermediate results
@ -114,6 +117,17 @@ impl FlexContext<'_> {
rect, rect,
) )
} }
fn align_for(&self, align_self: &AlignSelf) -> AlignItems {
match align_self {
AlignSelf::Auto => self.align_items,
AlignSelf::Stretch => AlignItems::Stretch,
AlignSelf::FlexStart => AlignItems::FlexStart,
AlignSelf::FlexEnd => AlignItems::FlexEnd,
AlignSelf::Center => AlignItems::Center,
AlignSelf::Baseline => AlignItems::Baseline,
}
}
} }
impl FlexContainer { impl FlexContainer {
@ -252,6 +266,8 @@ fn layout<'context, 'boxes>(
FlexWrap::Nowrap | FlexWrap::Wrap => false, FlexWrap::Nowrap | FlexWrap::Wrap => false,
FlexWrap::WrapReverse => true, FlexWrap::WrapReverse => true,
}; };
let align_items = containing_block.style.clone_align_items();
let mut flex_context = FlexContext { let mut flex_context = FlexContext {
layout_context, layout_context,
positioning_context, positioning_context,
@ -260,6 +276,7 @@ fn layout<'context, 'boxes>(
container_max_cross_size, container_max_cross_size,
container_is_single_line, container_is_single_line,
flex_axis, flex_axis,
align_items,
main_start_cross_start_sides_are: MainStartCrossStart::from( main_start_cross_start_sides_are: MainStartCrossStart::from(
flex_direction, flex_direction,
flex_wrap_reverse, flex_wrap_reverse,