aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/fragment_tree/fragment_tree.rs
diff options
context:
space:
mode:
authorOriol Brufau <obrufau@igalia.com>2024-10-31 15:44:15 +0100
committerGitHub <noreply@github.com>2024-10-31 14:44:15 +0000
commit31566aef02af25625ec2f28d3b108f8e0234b974 (patch)
tree6795a3021276faf431b9e85dec97394975b2ef09 /components/layout_2020/fragment_tree/fragment_tree.rs
parent62c79514249ac2c493390e75cd66235bd31942f2 (diff)
downloadservo-31566aef02af25625ec2f28d3b108f8e0234b974.tar.gz
servo-31566aef02af25625ec2f28d3b108f8e0234b974.zip
Fix geometry queries for floats and replaced inlines (#34083)
APIs like `clientWidth` were returning zero. Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Diffstat (limited to 'components/layout_2020/fragment_tree/fragment_tree.rs')
-rw-r--r--components/layout_2020/fragment_tree/fragment_tree.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/components/layout_2020/fragment_tree/fragment_tree.rs b/components/layout_2020/fragment_tree/fragment_tree.rs
index 5394f08cc33..060e8b4a100 100644
--- a/components/layout_2020/fragment_tree/fragment_tree.rs
+++ b/components/layout_2020/fragment_tree/fragment_tree.rs
@@ -16,6 +16,7 @@ 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)]
@@ -134,13 +135,15 @@ impl FragmentTree {
}
let rect = match fragment {
- Fragment::Box(fragment) => {
+ Fragment::Box(fragment) | Fragment::Float(fragment) => {
// https://drafts.csswg.org/cssom-view/#dom-element-clienttop
// " If the element has no associated CSS layout box or if the
// 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() {
+ if fragment.style.get_box().display.is_inline_flow() &&
+ !fragment.base.flags.contains(FragmentFlags::IS_REPLACED)
+ {
return Some(Rect::zero());
}