aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout/fragment.rs')
-rw-r--r--components/layout/fragment.rs26
1 files changed, 21 insertions, 5 deletions
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs
index a512db3670c..568ebf50657 100644
--- a/components/layout/fragment.rs
+++ b/components/layout/fragment.rs
@@ -1446,7 +1446,7 @@ impl Fragment {
/// A helper method that uses the breaking strategy described by `slice_iterator` (at present,
/// either natural word breaking or character breaking) to split this fragment.
- fn calculate_split_position_using_breaking_strategy<'a,I>(
+ fn calculate_split_position_using_breaking_strategy<'a, I>(
&self,
slice_iterator: I,
max_inline_size: Au,
@@ -1637,7 +1637,7 @@ impl Fragment {
match self.specific {
SpecificFragmentInfo::InlineAbsoluteHypothetical(ref mut info) => {
- let block_flow = info.flow_ref.as_block();
+ let block_flow = info.flow_ref.as_mut_block();
block_flow.base.position.size.inline =
block_flow.base.intrinsic_inline_sizes.preferred_inline_size;
@@ -1645,7 +1645,7 @@ impl Fragment {
self.border_box.size.inline = Au(0);
}
SpecificFragmentInfo::InlineBlock(ref mut info) => {
- let block_flow = info.flow_ref.as_block();
+ let block_flow = info.flow_ref.as_mut_block();
self.border_box.size.inline =
max(block_flow.base.intrinsic_inline_sizes.minimum_inline_size,
block_flow.base.intrinsic_inline_sizes.preferred_inline_size);
@@ -1653,7 +1653,7 @@ impl Fragment {
block_flow.base.block_container_writing_mode = self.style.writing_mode;
}
SpecificFragmentInfo::InlineAbsolute(ref mut info) => {
- let block_flow = info.flow_ref.as_block();
+ let block_flow = info.flow_ref.as_mut_block();
self.border_box.size.inline =
max(block_flow.base.intrinsic_inline_sizes.minimum_inline_size,
block_flow.base.intrinsic_inline_sizes.preferred_inline_size);
@@ -1810,7 +1810,7 @@ impl Fragment {
}
SpecificFragmentInfo::InlineBlock(ref info) => {
// See CSS 2.1 § 10.8.1.
- let block_flow = info.flow_ref.as_immutable_block();
+ let block_flow = info.flow_ref.as_block();
let font_style = self.style.get_font_arc();
let font_metrics = text::font_metrics_for_style(&mut layout_context.font_context(),
font_style);
@@ -2234,6 +2234,22 @@ impl Fragment {
pub fn margin_box_inline_size(&self) -> Au {
self.border_box.size.inline + self.margin.inline_start_end()
}
+
+ /// Returns true if this node *or any of the nodes within its inline fragment context* have
+ /// non-`static` `position`.
+ pub fn is_positioned(&self) -> bool {
+ if self.style.get_box().position != position::T::static_ {
+ return true
+ }
+ if let Some(ref inline_context) = self.inline_context {
+ for node in inline_context.nodes.iter() {
+ if node.style.get_box().position != position::T::static_ {
+ return true
+ }
+ }
+ }
+ false
+ }
}
impl fmt::Debug for Fragment {