Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some more boring stuff to change how we compute content sizes #26852

Merged
merged 5 commits into from Jun 15, 2020

Move IndependentFormattingContext::as_replaced to IndependentFormatti…

…ngContextContents
  • Loading branch information
nox committed Jun 15, 2020
commit b53959d23d54e3a30a4c9d01ab2eb5b605d2579c
@@ -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
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.