1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 11:47:45 +00:00

LibWeb: Move available_space_for_line() into InlineFormattingContext

This commit is contained in:
Andreas Kling 2022-01-18 11:00:25 +01:00
parent 1f603c54ff
commit 39b2046c42
2 changed files with 15 additions and 13 deletions

View file

@ -25,23 +25,18 @@ InlineFormattingContext::~InlineFormattingContext()
{ {
} }
struct AvailableSpaceForLineInfo { InlineFormattingContext::AvailableSpaceForLineInfo InlineFormattingContext::available_space_for_line(size_t line_index) const
float left { 0 };
float right { 0 };
};
static AvailableSpaceForLineInfo available_space_for_line(const InlineFormattingContext& context, size_t line_index)
{ {
if (!context.parent()->is_block_formatting_context()) if (!parent()->is_block_formatting_context())
return { 0, context.context_box().width() }; return { 0, context_box().width() };
AvailableSpaceForLineInfo info; AvailableSpaceForLineInfo info;
// FIXME: This is a total hack guess since we don't actually know the final y position of lines here! // FIXME: This is a total hack guess since we don't actually know the final y position of lines here!
float line_height = context.containing_block().line_height(); float line_height = containing_block().line_height();
float y = (line_index * line_height); float y = (line_index * line_height);
auto& bfc = static_cast<const BlockFormattingContext&>(*context.parent()); auto const& bfc = static_cast<BlockFormattingContext const&>(*parent());
for (ssize_t i = bfc.left_floating_boxes().size() - 1; i >= 0; --i) { for (ssize_t i = bfc.left_floating_boxes().size() - 1; i >= 0; --i) {
auto& floating_box = *bfc.left_floating_boxes().at(i); auto& floating_box = *bfc.left_floating_boxes().at(i);
@ -52,7 +47,7 @@ static AvailableSpaceForLineInfo available_space_for_line(const InlineFormatting
} }
} }
info.right = context.containing_block().width(); info.right = containing_block().width();
for (ssize_t i = bfc.right_floating_boxes().size() - 1; i >= 0; --i) { for (ssize_t i = bfc.right_floating_boxes().size() - 1; i >= 0; --i) {
auto& floating_box = *bfc.right_floating_boxes().at(i); auto& floating_box = *bfc.right_floating_boxes().at(i);
@ -68,7 +63,7 @@ static AvailableSpaceForLineInfo available_space_for_line(const InlineFormatting
float InlineFormattingContext::available_width_at_line(size_t line_index) const float InlineFormattingContext::available_width_at_line(size_t line_index) const
{ {
auto info = available_space_for_line(*this, line_index); auto info = available_space_for_line(line_index);
return info.right - info.left; return info.right - info.left;
} }
@ -98,7 +93,7 @@ void InlineFormattingContext::run(Box&, LayoutMode layout_mode)
max_height = max(max_height, fragment.height()); max_height = max(max_height, fragment.height());
} }
float x_offset = available_space_for_line(*this, line_index).left; float x_offset = available_space_for_line(line_index).left;
float excess_horizontal_space = (float)containing_block().width() - line_box.width(); float excess_horizontal_space = (float)containing_block().width() - line_box.width();

View file

@ -28,6 +28,13 @@ public:
void dimension_box_on_line(Box&, LayoutMode); void dimension_box_on_line(Box&, LayoutMode);
private: private:
struct AvailableSpaceForLineInfo {
float left { 0 };
float right { 0 };
};
AvailableSpaceForLineInfo available_space_for_line(size_t line_index) const;
void generate_line_boxes(LayoutMode); void generate_line_boxes(LayoutMode);
}; };