1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:58:11 +00:00

LibWeb: More specialization of intrinsic sizing layout

This patch adds a separate entry point for this kind of layout.
We override it in BFC to set up initial width/height values for the
BFC root block.

Resulting dimensions are assigned as content_width and content_height
at the end of intrinsic sizing, for each axis, if it's either "auto"
or there's a min-content or max-content constraint in effect.
This commit is contained in:
Andreas Kling 2022-07-10 22:06:20 +02:00
parent 28eec22c83
commit 61c27815e4
4 changed files with 39 additions and 11 deletions

View file

@ -28,6 +28,11 @@ FormattingContext::FormattingContext(Type type, FormattingState& state, Box cons
FormattingContext::~FormattingContext() = default;
void FormattingContext::run_intrinsic_size_determination(Box const& box)
{
run(box, LayoutMode::IntrinsicSizeDetermination);
}
bool FormattingContext::creates_block_formatting_context(Box const& box)
{
if (box.is_root_element())
@ -863,7 +868,7 @@ float FormattingContext::calculate_min_content_width(Layout::Box const& box) con
auto context = const_cast<FormattingContext*>(this)->create_independent_formatting_context_if_needed(throwaway_state, box);
VERIFY(context);
context->run(box, LayoutMode::IntrinsicSizeDetermination);
context->run_intrinsic_size_determination(box);
if (context->type() == FormattingContext::Type::Flex) {
cache.min_content_width = box_state.content_width;
} else {
@ -893,7 +898,7 @@ float FormattingContext::calculate_max_content_width(Layout::Box const& box) con
auto context = const_cast<FormattingContext*>(this)->create_independent_formatting_context_if_needed(throwaway_state, box);
VERIFY(context);
context->run(box, LayoutMode::IntrinsicSizeDetermination);
context->run_intrinsic_size_determination(box);
if (context->type() == FormattingContext::Type::Flex) {
cache.max_content_width = box_state.content_width;
} else {
@ -924,7 +929,7 @@ float FormattingContext::calculate_min_content_height(Layout::Box const& box) co
auto context = const_cast<FormattingContext*>(this)->create_independent_formatting_context_if_needed(throwaway_state, box);
VERIFY(context);
context->run(box, LayoutMode::IntrinsicSizeDetermination);
context->run_intrinsic_size_determination(box);
if (context->type() == FormattingContext::Type::Flex) {
cache.min_content_height = box_state.content_height;
} else {
@ -955,7 +960,7 @@ float FormattingContext::calculate_max_content_height(Layout::Box const& box) co
auto context = const_cast<FormattingContext*>(this)->create_independent_formatting_context_if_needed(throwaway_state, box);
VERIFY(context);
context->run(box, LayoutMode::IntrinsicSizeDetermination);
context->run_intrinsic_size_determination(box);
if (context->type() == FormattingContext::Type::Flex) {
cache.max_content_height = box_state.content_height;
} else {