mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 10:22:05 -05:00
LibWeb: Compute horizontal overflow for the initial containing block
This finally allows LibWeb to scroll pages horizontally instead of just clipping things at the right edge.
This commit is contained in:
parent
0241071ca2
commit
07096b7765
1 changed files with 9 additions and 5 deletions
|
@ -577,15 +577,19 @@ void BlockFormattingContext::layout_initial_containing_block(LayoutMode layout_m
|
||||||
layout_block_level_children(root(), layout_mode);
|
layout_block_level_children(root(), layout_mode);
|
||||||
|
|
||||||
// Compute scrollable overflow.
|
// Compute scrollable overflow.
|
||||||
float lowest_bottom = 0;
|
float bottom_edge = 0;
|
||||||
icb.for_each_child_of_type<Box>([&](auto& child) {
|
float right_edge = 0;
|
||||||
lowest_bottom = max(lowest_bottom, child.absolute_rect().bottom());
|
icb.for_each_in_subtree_of_type<Box>([&](auto& child) {
|
||||||
|
auto child_rect = child.absolute_rect();
|
||||||
|
bottom_edge = max(bottom_edge, child_rect.bottom());
|
||||||
|
right_edge = max(right_edge, child_rect.right());
|
||||||
|
return IterationDecision::Continue;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (lowest_bottom >= viewport_rect.height()) {
|
if (bottom_edge >= viewport_rect.height() || right_edge >= viewport_rect.width()) {
|
||||||
auto& overflow_data = icb.ensure_overflow_data();
|
auto& overflow_data = icb.ensure_overflow_data();
|
||||||
overflow_data.scrollable_overflow_rect = viewport_rect.to_type<float>();
|
overflow_data.scrollable_overflow_rect = viewport_rect.to_type<float>();
|
||||||
overflow_data.scrollable_overflow_rect.set_height(lowest_bottom);
|
overflow_data.scrollable_overflow_rect.set_size(right_edge, bottom_edge);
|
||||||
} else {
|
} else {
|
||||||
icb.clear_overflow_data();
|
icb.clear_overflow_data();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue