diff options
Diffstat (limited to 'components/layout/flow')
-rw-r--r-- | components/layout/flow/construct.rs | 31 | ||||
-rw-r--r-- | components/layout/flow/float.rs | 3 | ||||
-rw-r--r-- | components/layout/flow/inline/construct.rs | 5 | ||||
-rw-r--r-- | components/layout/flow/inline/inline_box.rs | 8 | ||||
-rw-r--r-- | components/layout/flow/inline/line.rs | 3 | ||||
-rw-r--r-- | components/layout/flow/inline/mod.rs | 19 | ||||
-rw-r--r-- | components/layout/flow/root.rs | 2 |
7 files changed, 14 insertions, 57 deletions
diff --git a/components/layout/flow/construct.rs b/components/layout/flow/construct.rs index 334da8ae2b0..cc3fe0e6f44 100644 --- a/components/layout/flow/construct.rs +++ b/components/layout/flow/construct.rs @@ -199,7 +199,7 @@ impl<'dom, 'style> BlockContainerBuilder<'dom, 'style> { context, info, block_level_boxes: Vec::new(), - propagated_data: propagated_data.union(&info.style), + propagated_data, have_already_seen_first_line_for_text_indent: false, anonymous_box_info: None, anonymous_table_content: Vec::new(), @@ -228,7 +228,6 @@ impl<'dom, 'style> BlockContainerBuilder<'dom, 'style> { fn finish_ongoing_inline_formatting_context(&mut self) -> Option<InlineFormattingContext> { self.inline_formatting_context_builder.take()?.finish( self.context, - self.propagated_data, !self.have_already_seen_first_line_for_text_indent, self.info.is_single_line_text_input(), self.info.style.writing_mode.to_bidi_level(), @@ -280,16 +279,6 @@ impl<'dom, 'style> BlockContainerBuilder<'dom, 'style> { // creation of an inline table. It requires the parent to be an inline box. let inline_table = self.currently_processing_inline_box(); - // Text decorations are not propagated to atomic inline-level descendants. - // From https://drafts.csswg.org/css2/#lining-striking-props: - // > Note that text decorations are not propagated to floating and absolutely - // > positioned descendants, nor to the contents of atomic inline-level descendants - // > such as inline blocks and inline tables. - let propagated_data = match inline_table { - true => self.propagated_data.without_text_decorations(), - false => self.propagated_data, - }; - let contents: Vec<AnonymousTableContent<'dom>> = self.anonymous_table_content.drain(..).collect(); let last_text = match contents.last() { @@ -298,7 +287,7 @@ impl<'dom, 'style> BlockContainerBuilder<'dom, 'style> { }; let (table_info, ifc) = - Table::construct_anonymous(self.context, self.info, contents, propagated_data); + Table::construct_anonymous(self.context, self.info, contents, self.propagated_data); if inline_table { self.ensure_inline_formatting_context_builder() @@ -315,7 +304,7 @@ impl<'dom, 'style> BlockContainerBuilder<'dom, 'style> { info: table_info, box_slot: BoxSlot::dummy(), kind: BlockLevelCreator::AnonymousTable { table_block }, - propagated_data, + propagated_data: self.propagated_data, }); } @@ -464,7 +453,7 @@ impl<'dom> BlockContainerBuilder<'dom, '_> { contents, list_item_style, }, - propagated_data: self.propagated_data.without_text_decorations(), + propagated_data: self.propagated_data, }); } @@ -480,15 +469,14 @@ impl<'dom> BlockContainerBuilder<'dom, '_> { else { // If this inline element is an atomic, handle it and return. let context = self.context; - let propagaged_data = self.propagated_data.without_text_decorations(); + let propagated_data = self.propagated_data; let atomic = self.ensure_inline_formatting_context_builder().push_atomic( IndependentFormattingContext::construct( context, info, display_inside, contents, - // Text decorations are not propagated to atomic inline-level descendants. - propagaged_data, + propagated_data, ), ); box_slot.set(LayoutBox::InlineLevel(vec![atomic])); @@ -550,7 +538,6 @@ impl<'dom> BlockContainerBuilder<'dom, '_> { .and_then(|builder| { builder.split_around_block_and_finish( self.context, - self.propagated_data, !self.have_already_seen_first_line_for_text_indent, self.info.style.writing_mode.to_bidi_level(), ) @@ -631,7 +618,7 @@ impl<'dom> BlockContainerBuilder<'dom, '_> { info: info.clone(), box_slot, kind, - propagated_data: self.propagated_data.without_text_decorations(), + propagated_data: self.propagated_data, }); } @@ -664,7 +651,7 @@ impl<'dom> BlockContainerBuilder<'dom, '_> { info: info.clone(), box_slot, kind, - propagated_data: self.propagated_data.without_text_decorations(), + propagated_data: self.propagated_data, }); } @@ -754,7 +741,7 @@ impl BlockLevelJob<'_> { context, info, contents, - self.propagated_data.without_text_decorations(), + self.propagated_data, false, /* is_list_item */ ); ArcRefCell::new(BlockLevelBox::OutsideMarker(OutsideMarker { diff --git a/components/layout/flow/float.rs b/components/layout/flow/float.rs index f1ae2b4459a..bb6c7ca8983 100644 --- a/components/layout/flow/float.rs +++ b/components/layout/flow/float.rs @@ -897,8 +897,7 @@ impl FloatBox { info, display_inside, contents, - // Text decorations are not propagated to any out-of-flow descendants - propagated_data.without_text_decorations(), + propagated_data, ), } } diff --git a/components/layout/flow/inline/construct.rs b/components/layout/flow/inline/construct.rs index 600da9b721a..07a2e914835 100644 --- a/components/layout/flow/inline/construct.rs +++ b/components/layout/flow/inline/construct.rs @@ -16,7 +16,6 @@ use super::{ InlineBox, InlineBoxIdentifier, InlineBoxes, InlineFormattingContext, InlineItem, SharedInlineStyles, }; -use crate::PropagatedBoxTreeData; use crate::cell::ArcRefCell; use crate::context::LayoutContext; use crate::dom_traversal::NodeAndStyleInfo; @@ -344,7 +343,6 @@ impl InlineFormattingContextBuilder { pub(crate) fn split_around_block_and_finish( &mut self, layout_context: &LayoutContext, - propagated_data: PropagatedBoxTreeData, has_first_formatted_line: bool, default_bidi_level: Level, ) -> Option<InlineFormattingContext> { @@ -386,7 +384,6 @@ impl InlineFormattingContextBuilder { inline_builder_from_before_split.finish( layout_context, - propagated_data, has_first_formatted_line, /* is_single_line_text_input = */ false, default_bidi_level, @@ -397,7 +394,6 @@ impl InlineFormattingContextBuilder { pub(crate) fn finish( self, layout_context: &LayoutContext, - propagated_data: PropagatedBoxTreeData, has_first_formatted_line: bool, is_single_line_text_input: bool, default_bidi_level: Level, @@ -410,7 +406,6 @@ impl InlineFormattingContextBuilder { Some(InlineFormattingContext::new_with_builder( self, layout_context, - propagated_data, has_first_formatted_line, is_single_line_text_input, default_bidi_level, diff --git a/components/layout/flow/inline/inline_box.rs b/components/layout/flow/inline/inline_box.rs index b547f3b5935..a9642d3b222 100644 --- a/components/layout/flow/inline/inline_box.rs +++ b/components/layout/flow/inline/inline_box.rs @@ -256,13 +256,7 @@ impl InlineBoxContainerState { } Self { - base: InlineContainerState::new( - style, - flags, - Some(parent_container), - parent_container.text_decoration_line, - font_metrics, - ), + base: InlineContainerState::new(style, flags, Some(parent_container), font_metrics), identifier: inline_box.identifier, base_fragment_info: inline_box.base.base_fragment_info, pbm, diff --git a/components/layout/flow/inline/line.rs b/components/layout/flow/inline/line.rs index 3b92078d67d..14a1531883f 100644 --- a/components/layout/flow/inline/line.rs +++ b/components/layout/flow/inline/line.rs @@ -15,7 +15,6 @@ use style::values::generics::box_::{GenericVerticalAlign, VerticalAlignKeyword}; use style::values::generics::font::LineHeight; use style::values::specified::align::AlignFlags; use style::values::specified::box_::DisplayOutside; -use style::values::specified::text::TextDecorationLine; use unicode_bidi::{BidiInfo, Level}; use webrender_api::FontInstanceKey; @@ -572,7 +571,6 @@ impl LineItemLayout<'_, '_> { font_metrics: text_item.font_metrics, font_key: text_item.font_key, glyphs: text_item.text, - text_decoration_line: text_item.text_decoration_line, justification_adjustment: self.justification_adjustment, selection_range: text_item.selection_range, })), @@ -765,7 +763,6 @@ pub(super) struct TextRunLineItem { pub text: Vec<std::sync::Arc<GlyphStore>>, pub font_metrics: FontMetrics, pub font_key: FontInstanceKey, - pub text_decoration_line: TextDecorationLine, /// The BiDi level of this [`TextRunLineItem`] to enable reordering. pub bidi_level: Level, pub selection_range: Option<Range<ByteIndex>>, diff --git a/components/layout/flow/inline/mod.rs b/components/layout/flow/inline/mod.rs index 74d42ca6fb4..6fd4a51a526 100644 --- a/components/layout/flow/inline/mod.rs +++ b/components/layout/flow/inline/mod.rs @@ -103,7 +103,7 @@ use style::properties::style_structs::InheritedText; use style::values::generics::box_::VerticalAlignKeyword; use style::values::generics::font::LineHeight; use style::values::specified::box_::BaselineSource; -use style::values::specified::text::{TextAlignKeyword, TextDecorationLine}; +use style::values::specified::text::TextAlignKeyword; use style::values::specified::{TextAlignLast, TextJustify}; use text_run::{ TextRun, XI_LINE_BREAKING_CLASS_GL, XI_LINE_BREAKING_CLASS_WJ, XI_LINE_BREAKING_CLASS_ZWJ, @@ -134,7 +134,7 @@ use crate::geom::{LogicalRect, LogicalVec2, ToLogical}; use crate::positioned::{AbsolutelyPositionedBox, PositioningContext}; use crate::sizing::{ComputeInlineContentSizes, ContentSizes, InlineContentSizesResult}; use crate::style_ext::{ComputedValuesExt, PaddingBorderMargin}; -use crate::{ConstraintSpace, ContainingBlock, PropagatedBoxTreeData, SharedStyle}; +use crate::{ConstraintSpace, ContainingBlock, SharedStyle}; // From gfxFontConstants.h in Firefox. static FONT_SUBSCRIPT_OFFSET_RATIO: f32 = 0.20; @@ -163,8 +163,6 @@ pub(crate) struct InlineFormattingContext { /// share styles with all [`TextRun`] children. pub(super) shared_inline_styles: SharedInlineStyles, - pub(super) text_decoration_line: TextDecorationLine, - /// Whether this IFC contains the 1st formatted line of an element: /// <https://www.w3.org/TR/css-pseudo-4/#first-formatted-line>. pub(super) has_first_formatted_line: bool, @@ -628,12 +626,6 @@ pub(super) struct InlineContainerState { /// this inline box on the current line OR any previous line. has_content: RefCell<bool>, - /// Indicates whether this nesting level have text decorations in effect. - /// From <https://drafts.csswg.org/css-text-decor/#line-decoration> - // "When specified on or propagated to a block container that establishes - // an IFC..." - text_decoration_line: TextDecorationLine, - /// The block size contribution of this container's default font ie the size of the /// "strut." Whether this is integrated into the [`Self::nested_strut_block_sizes`] /// depends on the line-height quirk described in @@ -1461,7 +1453,6 @@ impl InlineFormattingContextLayout<'_> { inline_styles: text_run.inline_styles.clone(), font_metrics, font_key: ifc_font_info.key, - text_decoration_line: self.current_inline_container_state().text_decoration_line, bidi_level, selection_range, }, @@ -1655,7 +1646,6 @@ impl InlineFormattingContext { pub(super) fn new_with_builder( builder: InlineFormattingContextBuilder, layout_context: &LayoutContext, - propagated_data: PropagatedBoxTreeData, has_first_formatted_line: bool, is_single_line_text_input: bool, starting_bidi_level: Level, @@ -1711,7 +1701,6 @@ impl InlineFormattingContext { .last() .expect("Should have at least one SharedInlineStyle for the root of an IFC") .clone(), - text_decoration_line: propagated_data.text_decoration, has_first_formatted_line, contains_floats: builder.contains_floats, is_single_line_text_input, @@ -1781,7 +1770,6 @@ impl InlineFormattingContext { style.to_arc(), inline_container_state_flags, None, /* parent_container */ - self.text_decoration_line, default_font_metrics.as_ref(), ), inline_box_state_stack: Vec::new(), @@ -1879,10 +1867,8 @@ impl InlineContainerState { style: Arc<ComputedValues>, flags: InlineContainerStateFlags, parent_container: Option<&InlineContainerState>, - parent_text_decoration_line: TextDecorationLine, font_metrics: Option<&FontMetrics>, ) -> Self { - let text_decoration_line = parent_text_decoration_line | style.clone_text_decoration_line(); let font_metrics = font_metrics.cloned().unwrap_or_else(FontMetrics::empty); let line_height = line_height( &style, @@ -1919,7 +1905,6 @@ impl InlineContainerState { style, flags, has_content: RefCell::new(false), - text_decoration_line, nested_strut_block_sizes: nested_block_sizes, strut_block_sizes, baseline_offset, diff --git a/components/layout/flow/root.rs b/components/layout/flow/root.rs index a37db54065d..8ad3671032e 100644 --- a/components/layout/flow/root.rs +++ b/components/layout/flow/root.rs @@ -314,7 +314,7 @@ fn construct_for_root_element( let contents = ReplacedContents::for_element(root_element, context) .map_or_else(|| NonReplacedContents::OfElement.into(), Contents::Replaced); - let propagated_data = PropagatedBoxTreeData::default().union(&info.style); + let propagated_data = PropagatedBoxTreeData::default(); let root_box = if box_style.position.is_absolutely_positioned() { BlockLevelBox::OutOfFlowAbsolutelyPositionedBox(ArcRefCell::new( AbsolutelyPositionedBox::construct(context, &info, display_inside, contents), |