/* * Copyright (c) 2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::Layout { class BlockFormattingContext : public FormattingContext { public: explicit BlockFormattingContext(Box&, FormattingContext* parent); ~BlockFormattingContext(); virtual void run(Box&, LayoutMode) override; bool is_initial() const; const Vector& left_floating_boxes() const { return m_left_floating_boxes; } const Vector& right_floating_boxes() const { return m_right_floating_boxes; } protected: void compute_width(Box&); void compute_height(Box&); void compute_position(Box&); private: virtual bool is_block_formatting_context() const final { return true; } void compute_width_for_floating_box(Box&); void compute_width_for_block_level_replaced_element_in_normal_flow(ReplacedBox&); void layout_initial_containing_block(LayoutMode); void layout_block_level_children(Box&, LayoutMode); void layout_inline_children(Box&, LayoutMode); void place_block_level_replaced_element_in_normal_flow(Box& child, Box& container); void place_block_level_non_replaced_element_in_normal_flow(Box& child, Box& container); void layout_floating_child(Box&, Box& containing_block); Vector m_left_floating_boxes; Vector m_right_floating_boxes; }; }