mirror of
https://github.com/servo/servo.git
synced 2025-06-20 23:28:59 +01:00
Move IndependentFormattingContext::as_replaced to IndependentFormattingContextContents
This commit is contained in:
parent
b66dd66403
commit
b53959d23d
4 changed files with 32 additions and 19 deletions
|
@ -556,7 +556,7 @@ fn layout_atomic(
|
|||
start_corner += &relative_adjustement(&atomic.style, ifc.containing_block)
|
||||
}
|
||||
|
||||
let fragment = match atomic.as_replaced() {
|
||||
let fragment = match atomic.contents.as_replaced() {
|
||||
Ok(replaced) => {
|
||||
let size =
|
||||
replaced.used_size_as_if_inline_element(ifc.containing_block, &atomic.style, &pbm);
|
||||
|
|
|
@ -288,24 +288,24 @@ impl BlockLevelBox {
|
|||
)
|
||||
},
|
||||
)),
|
||||
BlockLevelBox::Independent(contents) => {
|
||||
BlockLevelBox::Independent(independent) => {
|
||||
Fragment::Box(positioning_context.layout_maybe_position_relative_fragment(
|
||||
layout_context,
|
||||
containing_block,
|
||||
&contents.style,
|
||||
|positioning_context| match contents.as_replaced() {
|
||||
&independent.style,
|
||||
|positioning_context| match independent.contents.as_replaced() {
|
||||
Ok(replaced) => layout_in_flow_replaced_block_level(
|
||||
containing_block,
|
||||
contents.tag,
|
||||
&contents.style,
|
||||
independent.tag,
|
||||
&independent.style,
|
||||
replaced,
|
||||
),
|
||||
Err(non_replaced) => layout_in_flow_non_replaced_block_level(
|
||||
layout_context,
|
||||
positioning_context,
|
||||
containing_block,
|
||||
contents.tag,
|
||||
&contents.style,
|
||||
independent.tag,
|
||||
&independent.style,
|
||||
NonReplacedContents::EstablishesAnIndependentFormattingContext(
|
||||
non_replaced,
|
||||
),
|
||||
|
|
|
@ -28,7 +28,7 @@ pub(crate) struct IndependentFormattingContext {
|
|||
/// If it was requested during construction
|
||||
pub content_sizes: BoxContentSizes,
|
||||
|
||||
contents: IndependentFormattingContextContents,
|
||||
pub contents: IndependentFormattingContextContents,
|
||||
}
|
||||
|
||||
pub(crate) struct IndependentLayout {
|
||||
|
@ -38,10 +38,13 @@ pub(crate) struct IndependentLayout {
|
|||
pub content_block_size: Length,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub(crate) struct IndependentFormattingContextContents(IndependentFormattingContextContentsKind);
|
||||
|
||||
// Private so that code outside of this module cannot match variants.
|
||||
// It should got through methods instead.
|
||||
#[derive(Debug, Serialize)]
|
||||
enum IndependentFormattingContextContents {
|
||||
enum IndependentFormattingContextContentsKind {
|
||||
Flow(BlockFormattingContext),
|
||||
Flex(FlexContainer),
|
||||
|
||||
|
@ -80,7 +83,9 @@ impl IndependentFormattingContext {
|
|||
tag: Tag::from_node_and_style_info(info),
|
||||
style: Arc::clone(&info.style),
|
||||
content_sizes,
|
||||
contents: IndependentFormattingContextContents::Flow(bfc),
|
||||
contents: IndependentFormattingContextContents(
|
||||
IndependentFormattingContextContentsKind::Flow(bfc),
|
||||
),
|
||||
}
|
||||
},
|
||||
DisplayInside::Flex => {
|
||||
|
@ -95,7 +100,9 @@ impl IndependentFormattingContext {
|
|||
tag: Tag::from_node_and_style_info(info),
|
||||
style: Arc::clone(&info.style),
|
||||
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),
|
||||
style: Arc::clone(&info.style),
|
||||
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),
|
||||
style: Arc::clone(&info.style),
|
||||
content_sizes,
|
||||
contents: IndependentFormattingContextContents::Flow(bfc),
|
||||
contents: IndependentFormattingContextContents(
|
||||
IndependentFormattingContextContentsKind::Flow(bfc),
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC> {
|
||||
use self::IndependentFormattingContextContents as Contents;
|
||||
impl IndependentFormattingContextContents {
|
||||
pub fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC<'_>> {
|
||||
use self::IndependentFormattingContextContentsKind as Contents;
|
||||
use self::NonReplacedIFC as NR;
|
||||
use self::NonReplacedIFCKind as Kind;
|
||||
match &self.contents {
|
||||
match &self.0 {
|
||||
Contents::Replaced(r) => Ok(r),
|
||||
Contents::Flow(f) => Err(NR(Kind::Flow(f))),
|
||||
Contents::Flex(f) => Err(NR(Kind::Flex(f))),
|
||||
|
|
|
@ -422,7 +422,7 @@ impl HoistedAbsolutelyPositionedBox {
|
|||
|
||||
let size;
|
||||
let replaced_used_size;
|
||||
match absolutely_positioned_box.context.as_replaced() {
|
||||
match absolutely_positioned_box.context.contents.as_replaced() {
|
||||
Ok(replaced) => {
|
||||
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
|
||||
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-height
|
||||
|
@ -474,7 +474,7 @@ impl HoistedAbsolutelyPositionedBox {
|
|||
|positioning_context| {
|
||||
let size;
|
||||
let fragments;
|
||||
match absolutely_positioned_box.context.as_replaced() {
|
||||
match absolutely_positioned_box.context.contents.as_replaced() {
|
||||
Ok(replaced) => {
|
||||
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-width
|
||||
// https://drafts.csswg.org/css2/visudet.html#abs-replaced-height
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue