mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 01:37:39 +03:00
LibWeb: Make IFC aware that its parent is always a BFC
This simplifies some code and allows us to use tighter types for the parent context everywhere.
This commit is contained in:
parent
83a6e698a0
commit
00bd17034d
Notes:
sideshowbarker
2024-07-17 20:20:59 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/00bd17034de
@ -384,7 +384,7 @@ void BlockFormattingContext::compute_position(Box& box)
|
||||
|
||||
void BlockFormattingContext::layout_inline_children(BlockContainer& block_container, LayoutMode layout_mode)
|
||||
{
|
||||
InlineFormattingContext context(block_container, this);
|
||||
InlineFormattingContext context(block_container, *this);
|
||||
context.run(block_container, layout_mode);
|
||||
}
|
||||
|
||||
|
@ -455,7 +455,7 @@ float FlexFormattingContext::layout_for_maximum_main_size(Box& box)
|
||||
auto& block_container = verify_cast<BlockContainer>(box);
|
||||
BlockFormattingContext bfc(block_container, this);
|
||||
bfc.run(box, LayoutMode::Default);
|
||||
InlineFormattingContext ifc(block_container, &bfc);
|
||||
InlineFormattingContext ifc(block_container, bfc);
|
||||
|
||||
if (is_row_layout()) {
|
||||
ifc.run(box, LayoutMode::OnlyRequiredLineBreaks);
|
||||
@ -805,7 +805,7 @@ float FlexFormattingContext::determine_hypothetical_cross_size_of_item(Box& box)
|
||||
auto& block_container = verify_cast<BlockContainer>(box);
|
||||
BlockFormattingContext bfc(block_container, this);
|
||||
bfc.run(box, LayoutMode::Default);
|
||||
InlineFormattingContext ifc(block_container, &bfc);
|
||||
InlineFormattingContext ifc(block_container, bfc);
|
||||
ifc.run(box, LayoutMode::OnlyRequiredLineBreaks);
|
||||
|
||||
return is_row_layout() ? box.height() : box.width();
|
||||
|
@ -95,7 +95,7 @@ OwnPtr<FormattingContext> FormattingContext::create_independent_formatting_conte
|
||||
|
||||
VERIFY(is_block_formatting_context());
|
||||
if (child_box.children_are_inline())
|
||||
return make<InlineFormattingContext>(verify_cast<BlockContainer>(child_box), this);
|
||||
return make<InlineFormattingContext>(verify_cast<BlockContainer>(child_box), static_cast<BlockFormattingContext&>(*this));
|
||||
|
||||
// The child box is a block container that doesn't create its own BFC.
|
||||
// It will be formatted by this BFC.
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
namespace Web::Layout {
|
||||
|
||||
InlineFormattingContext::InlineFormattingContext(BlockContainer& containing_block, FormattingContext* parent)
|
||||
: FormattingContext(Type::Inline, containing_block, parent)
|
||||
InlineFormattingContext::InlineFormattingContext(BlockContainer& containing_block, BlockFormattingContext& parent)
|
||||
: FormattingContext(Type::Inline, containing_block, &parent)
|
||||
{
|
||||
}
|
||||
|
||||
@ -26,14 +26,21 @@ InlineFormattingContext::~InlineFormattingContext()
|
||||
{
|
||||
}
|
||||
|
||||
BlockFormattingContext& InlineFormattingContext::parent()
|
||||
{
|
||||
return static_cast<BlockFormattingContext&>(*FormattingContext::parent());
|
||||
}
|
||||
|
||||
BlockFormattingContext const& InlineFormattingContext::parent() const
|
||||
{
|
||||
return static_cast<BlockFormattingContext const&>(*FormattingContext::parent());
|
||||
}
|
||||
|
||||
InlineFormattingContext::AvailableSpaceForLineInfo InlineFormattingContext::available_space_for_line(float y) const
|
||||
{
|
||||
if (!parent()->is_block_formatting_context())
|
||||
return { 0, context_box().width() };
|
||||
|
||||
AvailableSpaceForLineInfo info;
|
||||
|
||||
auto const& bfc = static_cast<BlockFormattingContext const&>(*parent());
|
||||
auto const& bfc = parent();
|
||||
|
||||
for (ssize_t i = bfc.left_side_floats().boxes.size() - 1; i >= 0; --i) {
|
||||
auto const& floating_box = bfc.left_side_floats().boxes.at(i);
|
||||
|
@ -15,9 +15,12 @@ namespace Web::Layout {
|
||||
|
||||
class InlineFormattingContext final : public FormattingContext {
|
||||
public:
|
||||
InlineFormattingContext(BlockContainer& containing_block, FormattingContext* parent);
|
||||
InlineFormattingContext(BlockContainer& containing_block, BlockFormattingContext& parent);
|
||||
~InlineFormattingContext();
|
||||
|
||||
BlockFormattingContext& parent();
|
||||
BlockFormattingContext const& parent() const;
|
||||
|
||||
BlockContainer& containing_block() { return static_cast<BlockContainer&>(context_box()); }
|
||||
BlockContainer const& containing_block() const { return static_cast<BlockContainer const&>(context_box()); }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user