diff options
author | bors-servo <infra@servo.org> | 2023-06-20 18:36:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-20 18:36:03 +0200 |
commit | 47714f767ed09890273fb2b34076934ce963964c (patch) | |
tree | 8ec87963c589beebb3c9b8ed2c330f4a5575f42e /components/layout_2020/flow/float.rs | |
parent | 836ae5fa48b7cb60dd801e6cd20becc1d839e8f5 (diff) | |
parent | 4cb43326024f2bf88357d32bfb56f293eaf2366d (diff) | |
download | servo-47714f767ed09890273fb2b34076934ce963964c.tar.gz servo-47714f767ed09890273fb2b34076934ce963964c.zip |
Auto merge of #29870 - mrobinson:float-root, r=Loirooriol
Layout 2020: Correct rendering of floated root
Fix two issues around floating a root element:
1. In the StackingContext code handle the case where a root element is a Float fragment and not a Box fragment. This fixes a debug assertion failure in the css/CSS2/float/float-root.html test.
2. When initializing the SequentialLayoutState, use the containing block width as the maximum inline float placement position instead of infinity. This fixes the rendering of css/CSS2/float/float-root.html.
Note that css/CSS2/float/float-root.html was passing before, because both the test and reference were subject to the same bug. This fixes a couple other tests as well.
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] There are tests for these changes
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
Diffstat (limited to 'components/layout_2020/flow/float.rs')
-rw-r--r-- | components/layout_2020/flow/float.rs | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/components/layout_2020/flow/float.rs b/components/layout_2020/flow/float.rs index 5750ed6039d..335373c139b 100644 --- a/components/layout_2020/flow/float.rs +++ b/components/layout_2020/flow/float.rs @@ -61,23 +61,13 @@ pub struct ContainingBlockPositionInfo { pub inline_end: Length, } -impl Default for ContainingBlockPositionInfo { - fn default() -> Self { - Self { - block_start: Length::zero(), - block_start_margins_not_collapsed: CollapsedMargin::zero(), - inline_start: Length::zero(), - inline_end: Length::new(f32::INFINITY), - } - } -} - impl ContainingBlockPositionInfo { pub fn new_with_inline_offsets(inline_start: Length, inline_end: Length) -> Self { Self { + block_start: Length::zero(), + block_start_margins_not_collapsed: CollapsedMargin::zero(), inline_start, inline_end, - ..Default::default() } } } @@ -109,7 +99,7 @@ pub struct FloatContext { impl FloatContext { /// Returns a new float context representing a containing block with the given content /// inline-size. - pub fn new() -> Self { + pub fn new(max_inline_size: Length) -> Self { let mut bands = FloatBandTree::new(); bands = bands.insert(FloatBand { top: Length::zero(), @@ -124,7 +114,10 @@ impl FloatContext { FloatContext { bands, ceiling: Length::zero(), - containing_block_info: Default::default(), + containing_block_info: ContainingBlockPositionInfo::new_with_inline_offsets( + Length::zero(), + max_inline_size, + ), clear_left_position: Length::zero(), clear_right_position: Length::zero(), } @@ -822,9 +815,9 @@ pub(crate) struct SequentialLayoutState { impl SequentialLayoutState { /// Creates a new empty `SequentialLayoutState`. - pub(crate) fn new() -> SequentialLayoutState { + pub(crate) fn new(max_inline_size: Length) -> SequentialLayoutState { SequentialLayoutState { - floats: FloatContext::new(), + floats: FloatContext::new(max_inline_size), current_margin: CollapsedMargin::zero(), bfc_relative_block_position: Length::zero(), } |