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:
parent
28eec22c83
commit
61c27815e4
4 changed files with 39 additions and 11 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue