aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOriol Brufau <obrufau@igalia.com>2024-11-12 16:50:20 +0100
committerGitHub <noreply@github.com>2024-11-12 15:50:20 +0000
commitbf75f17348d4174127973d19c72e405dbc5efaa3 (patch)
tree8b372576d62d11f57b6dc42e2a1ddafa854dc5a8
parentae029242f82459233a683c7623121dde6cae3f5b (diff)
downloadservo-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.rs8
-rw-r--r--components/layout_2020/fragment_tree/fragment_tree.rs5
-rw-r--r--components/layout_2020/query.rs7
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(_) |