mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 07:57:46 +00:00
LibWeb: Handle float clearing specified on line break elements
This commit is contained in:
parent
0652cc48c0
commit
b12820c967
6 changed files with 60 additions and 9 deletions
|
@ -752,7 +752,7 @@ CSSPixels BlockFormattingContext::BlockMarginState::current_collapsed_margin() c
|
|||
return collapsed_margin;
|
||||
}
|
||||
|
||||
BlockFormattingContext::DidIntroduceClearance BlockFormattingContext::clear_floating_boxes(Box const& child_box)
|
||||
BlockFormattingContext::DidIntroduceClearance BlockFormattingContext::clear_floating_boxes(Node const& child_box)
|
||||
{
|
||||
auto const& computed_values = child_box.computed_values();
|
||||
auto result = DidIntroduceClearance::No;
|
||||
|
|
|
@ -54,6 +54,15 @@ public:
|
|||
|
||||
void resolve_vertical_box_model_metrics(Box const&);
|
||||
|
||||
enum class DidIntroduceClearance {
|
||||
Yes,
|
||||
No,
|
||||
};
|
||||
|
||||
[[nodiscard]] DidIntroduceClearance clear_floating_boxes(Node const& child_box);
|
||||
|
||||
void reset_margin_state() { m_margin_state.reset(); }
|
||||
|
||||
private:
|
||||
CSSPixels compute_auto_height_for_block_level_element(Box const&, AvailableSpace const&);
|
||||
|
||||
|
@ -75,13 +84,6 @@ private:
|
|||
|
||||
void measure_scrollable_overflow(Box const&, CSSPixels& bottom_edge, CSSPixels& right_edge) const;
|
||||
|
||||
enum class DidIntroduceClearance {
|
||||
Yes,
|
||||
No,
|
||||
};
|
||||
|
||||
[[nodiscard]] DidIntroduceClearance clear_floating_boxes(Box const& child_box);
|
||||
|
||||
enum class FloatSide {
|
||||
Left,
|
||||
Right,
|
||||
|
|
|
@ -246,9 +246,15 @@ void InlineFormattingContext::generate_line_boxes(LayoutMode layout_mode)
|
|||
continue;
|
||||
|
||||
switch (item.type) {
|
||||
case InlineLevelIterator::Item::Type::ForcedBreak:
|
||||
case InlineLevelIterator::Item::Type::ForcedBreak: {
|
||||
line_builder.break_line(LineBuilder::ForcedBreak::Yes);
|
||||
if (item.node) {
|
||||
auto introduce_clearance = parent().clear_floating_boxes(*item.node);
|
||||
if (introduce_clearance == BlockFormattingContext::DidIntroduceClearance::Yes)
|
||||
parent().reset_margin_state();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case InlineLevelIterator::Item::Type::Element: {
|
||||
auto& box = verify_cast<Layout::Box>(*item.node);
|
||||
compute_inset(box);
|
||||
|
|
|
@ -187,9 +187,11 @@ Optional<InlineLevelIterator::Item> InlineLevelIterator::next(CSSPixels availabl
|
|||
}
|
||||
|
||||
if (is<Layout::BreakNode>(*m_current_node)) {
|
||||
auto& node = *m_current_node;
|
||||
skip_to_next();
|
||||
return Item {
|
||||
.type = Item::Type::ForcedBreak,
|
||||
.node = &node,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue