diff options
Diffstat (limited to 'components/layout/fragment.rs')
-rw-r--r-- | components/layout/fragment.rs | 26 |
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 { |