Move IndependentFormattingContext::as_replaced to IndependentFormattingContextContents

This commit is contained in:
Anthony Ramine 2020-06-10 14:23:55 +02:00
parent b66dd66403
commit b53959d23d
4 changed files with 32 additions and 19 deletions

View file

@ -556,7 +556,7 @@ fn layout_atomic(
start_corner += &relative_adjustement(&atomic.style, ifc.containing_block) start_corner += &relative_adjustement(&atomic.style, ifc.containing_block)
} }
let fragment = match atomic.as_replaced() { let fragment = match atomic.contents.as_replaced() {
Ok(replaced) => { Ok(replaced) => {
let size = let size =
replaced.used_size_as_if_inline_element(ifc.containing_block, &atomic.style, &pbm); replaced.used_size_as_if_inline_element(ifc.containing_block, &atomic.style, &pbm);

View file

@ -288,24 +288,24 @@ impl BlockLevelBox {
) )
}, },
)), )),
BlockLevelBox::Independent(contents) => { BlockLevelBox::Independent(independent) => {
Fragment::Box(positioning_context.layout_maybe_position_relative_fragment( Fragment::Box(positioning_context.layout_maybe_position_relative_fragment(
layout_context, layout_context,
containing_block, containing_block,
&contents.style, &independent.style,
|positioning_context| match contents.as_replaced() { |positioning_context| match independent.contents.as_replaced() {
Ok(replaced) => layout_in_flow_replaced_block_level( Ok(replaced) => layout_in_flow_replaced_block_level(
containing_block, containing_block,
contents.tag, independent.tag,
&contents.style, &independent.style,
replaced, replaced,
), ),
Err(non_replaced) => layout_in_flow_non_replaced_block_level( Err(non_replaced) => layout_in_flow_non_replaced_block_level(
layout_context, layout_context,
positioning_context, positioning_context,
containing_block, containing_block,
contents.tag, independent.tag,
&contents.style, &independent.style,
NonReplacedContents::EstablishesAnIndependentFormattingContext( NonReplacedContents::EstablishesAnIndependentFormattingContext(
non_replaced, non_replaced,
), ),

View file

@ -28,7 +28,7 @@ pub(crate) struct IndependentFormattingContext {
/// If it was requested during construction /// If it was requested during construction
pub content_sizes: BoxContentSizes, pub content_sizes: BoxContentSizes,
contents: IndependentFormattingContextContents, pub contents: IndependentFormattingContextContents,
} }
pub(crate) struct IndependentLayout { pub(crate) struct IndependentLayout {
@ -38,10 +38,13 @@ pub(crate) struct IndependentLayout {
pub content_block_size: Length, pub content_block_size: Length,
} }
#[derive(Debug, Serialize)]
pub(crate) struct IndependentFormattingContextContents(IndependentFormattingContextContentsKind);
// Private so that code outside of this module cannot match variants. // Private so that code outside of this module cannot match variants.
// It should got through methods instead. // It should got through methods instead.
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
enum IndependentFormattingContextContents { enum IndependentFormattingContextContentsKind {
Flow(BlockFormattingContext), Flow(BlockFormattingContext),
Flex(FlexContainer), Flex(FlexContainer),
@ -80,7 +83,9 @@ impl IndependentFormattingContext {
tag: Tag::from_node_and_style_info(info), tag: Tag::from_node_and_style_info(info),
style: Arc::clone(&info.style), style: Arc::clone(&info.style),
content_sizes, content_sizes,
contents: IndependentFormattingContextContents::Flow(bfc), contents: IndependentFormattingContextContents(
IndependentFormattingContextContentsKind::Flow(bfc),
),
} }
}, },
DisplayInside::Flex => { DisplayInside::Flex => {
@ -95,7 +100,9 @@ impl IndependentFormattingContext {
tag: Tag::from_node_and_style_info(info), tag: Tag::from_node_and_style_info(info),
style: Arc::clone(&info.style), style: Arc::clone(&info.style),
content_sizes, content_sizes,
contents: IndependentFormattingContextContents::Flex(fc), contents: IndependentFormattingContextContents(
IndependentFormattingContextContentsKind::Flex(fc),
),
} }
}, },
}, },
@ -106,7 +113,9 @@ impl IndependentFormattingContext {
tag: Tag::from_node_and_style_info(info), tag: Tag::from_node_and_style_info(info),
style: Arc::clone(&info.style), style: Arc::clone(&info.style),
content_sizes, content_sizes,
contents: IndependentFormattingContextContents::Replaced(replaced), contents: IndependentFormattingContextContents(
IndependentFormattingContextContentsKind::Replaced(replaced),
),
} }
}, },
} }
@ -129,15 +138,19 @@ impl IndependentFormattingContext {
tag: Tag::from_node_and_style_info(info), tag: Tag::from_node_and_style_info(info),
style: Arc::clone(&info.style), style: Arc::clone(&info.style),
content_sizes, content_sizes,
contents: IndependentFormattingContextContents::Flow(bfc), contents: IndependentFormattingContextContents(
IndependentFormattingContextContentsKind::Flow(bfc),
),
} }
} }
}
pub fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC> { impl IndependentFormattingContextContents {
use self::IndependentFormattingContextContents as Contents; pub fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC<'_>> {
use self::IndependentFormattingContextContentsKind as Contents;
use self::NonReplacedIFC as NR; use self::NonReplacedIFC as NR;
use self::NonReplacedIFCKind as Kind; use self::NonReplacedIFCKind as Kind;
match &self.contents { match &self.0 {
Contents::Replaced(r) => Ok(r), Contents::Replaced(r) => Ok(r),
Contents::Flow(f) => Err(NR(Kind::Flow(f))), Contents::Flow(f) => Err(NR(Kind::Flow(f))),
Contents::Flex(f) => Err(NR(Kind::Flex(f))), Contents::Flex(f) => Err(NR(Kind::Flex(f))),

View file

@ -422,7 +422,7 @@ impl HoistedAbsolutelyPositionedBox {
let size; let size;
let replaced_used_size; let replaced_used_size;
match absolutely_positioned_box.context.as_replaced() { match absolutely_positioned_box.context.contents.as_replaced() {
Ok(replaced) => { Ok(replaced) => {
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-width // https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-height // https://drafts.csswg.org/css2/visudet.html#abs-replaced-height
@ -474,7 +474,7 @@ impl HoistedAbsolutelyPositionedBox {
|positioning_context| { |positioning_context| {
let size; let size;
let fragments; let fragments;
match absolutely_positioned_box.context.as_replaced() { match absolutely_positioned_box.context.contents.as_replaced() {
Ok(replaced) => { Ok(replaced) => {
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-width // https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-height // https://drafts.csswg.org/css2/visudet.html#abs-replaced-height