diff options
author | Oriol Brufau <obrufau@igalia.com> | 2024-11-12 16:50:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-12 15:50:20 +0000 |
commit | bf75f17348d4174127973d19c72e405dbc5efaa3 (patch) | |
tree | 8b372576d62d11f57b6dc42e2a1ddafa854dc5a8 | |
parent | ae029242f82459233a683c7623121dde6cae3f5b (diff) | |
download | servo-bf75f17348d4174127973d19c72e405dbc5efaa3.tar.gz servo-bf75f17348d4174127973d19c72e405dbc5efaa3.zip |
Add `BoxFragment::is_inline_box()` (#34233)
A helper function to check for inline boxes.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
-rw-r--r-- | components/layout_2020/fragment_tree/box_fragment.rs | 8 | ||||
-rw-r--r-- | components/layout_2020/fragment_tree/fragment_tree.rs | 5 | ||||
-rw-r--r-- | components/layout_2020/query.rs | 7 |
3 files changed, 10 insertions, 10 deletions
diff --git a/components/layout_2020/fragment_tree/box_fragment.rs b/components/layout_2020/fragment_tree/box_fragment.rs index 6e1039200e2..7b0284efea6 100644 --- a/components/layout_2020/fragment_tree/box_fragment.rs +++ b/components/layout_2020/fragment_tree/box_fragment.rs @@ -15,6 +15,7 @@ use style::Zero; use super::{BaseFragment, BaseFragmentInfo, CollapsedBlockMargins, Fragment}; use crate::cell::ArcRefCell; use crate::formatting_contexts::Baselines; +use crate::fragment_tree::FragmentFlags; use crate::geom::{ AuOrAuto, LengthPercentageOrAuto, PhysicalPoint, PhysicalRect, PhysicalSides, ToLogical, }; @@ -325,4 +326,11 @@ impl BoxFragment { convert_to_au_or_auto(PhysicalSides::new(top, right, bottom, left)) } + + /// Whether this is a non-replaced inline-level box whose inner display type is `flow`. + /// <https://drafts.csswg.org/css-display-3/#inline-box> + pub(crate) fn is_inline_box(&self) -> bool { + self.style.get_box().display.is_inline_flow() && + !self.base.flags.contains(FragmentFlags::IS_REPLACED) + } } diff --git a/components/layout_2020/fragment_tree/fragment_tree.rs b/components/layout_2020/fragment_tree/fragment_tree.rs index 060e8b4a100..f2a440ecf9b 100644 --- a/components/layout_2020/fragment_tree/fragment_tree.rs +++ b/components/layout_2020/fragment_tree/fragment_tree.rs @@ -16,7 +16,6 @@ use super::{ContainingBlockManager, Fragment, Tag}; use crate::cell::ArcRefCell; use crate::display_list::StackingContext; use crate::flow::CanvasBackground; -use crate::fragment_tree::FragmentFlags; use crate::geom::PhysicalRect; #[derive(Serialize)] @@ -141,9 +140,7 @@ impl FragmentTree { // CSS layout box is inline, return zero." For this check we // also explicitly ignore the list item portion of the display // style. - if fragment.style.get_box().display.is_inline_flow() && - !fragment.base.flags.contains(FragmentFlags::IS_REPLACED) - { + if fragment.is_inline_box() { return Some(Rect::zero()); } diff --git a/components/layout_2020/query.rs b/components/layout_2020/query.rs index f221b3c5b93..191d68a2131 100644 --- a/components/layout_2020/query.rs +++ b/components/layout_2020/query.rs @@ -248,12 +248,7 @@ fn resolved_size_should_be_used_value(fragment: &Fragment) -> bool { // https://drafts.csswg.org/css-sizing-3/#preferred-size-properties // > Applies to: all elements except non-replaced inlines match fragment { - Fragment::Box(box_fragment) => { - !box_fragment.style.get_box().display.is_inline_flow() || - fragment - .base() - .is_some_and(|base| base.flags.contains(FragmentFlags::IS_REPLACED)) - }, + Fragment::Box(box_fragment) => !box_fragment.is_inline_box(), Fragment::Float(_) | Fragment::Positioning(_) | Fragment::AbsoluteOrFixedPositioned(_) | |