diff options
author | Martin Robinson <mrobinson@igalia.com> | 2020-06-05 12:06:25 +0200 |
---|---|---|
committer | Martin Robinson <mrobinson@igalia.com> | 2020-06-06 17:25:08 +0200 |
commit | 89855afa4daed56907b84daeb674066524e4352c (patch) | |
tree | a80dfbaa99b44bfcb049cd6182d70bf397ac04d0 /components/layout_2020/formatting_contexts.rs | |
parent | 7df4655b604683aee5763696589b041024b264ce (diff) | |
download | servo-89855afa4daed56907b84daeb674066524e4352c.tar.gz servo-89855afa4daed56907b84daeb674066524e4352c.zip |
layout_2020: Tag fragments with their pseudo content type
This will allow us to answer queries and properly handle animations in
the future for fragments generated for pseudo content.
Diffstat (limited to 'components/layout_2020/formatting_contexts.rs')
-rw-r--r-- | components/layout_2020/formatting_contexts.rs | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/components/layout_2020/formatting_contexts.rs b/components/layout_2020/formatting_contexts.rs index a721b54ba0f..189ec36cb9a 100644 --- a/components/layout_2020/formatting_contexts.rs +++ b/components/layout_2020/formatting_contexts.rs @@ -3,10 +3,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::context::LayoutContext; -use crate::dom_traversal::{Contents, NodeExt}; +use crate::dom_traversal::{Contents, NodeAndStyleInfo, NodeExt}; use crate::flexbox::FlexContainer; use crate::flow::BlockFormattingContext; -use crate::fragments::Fragment; +use crate::fragments::{Fragment, Tag}; use crate::positioned::PositioningContext; use crate::replaced::ReplacedContent; use crate::sizing::{BoxContentSizes, ContentSizesRequest}; @@ -14,7 +14,6 @@ use crate::style_ext::DisplayInside; use crate::ContainingBlock; use servo_arc::Arc; use std::convert::TryInto; -use style::dom::OpaqueNode; use style::properties::ComputedValues; use style::values::computed::Length; use style::values::specified::text::TextDecorationLine; @@ -22,7 +21,7 @@ use style::values::specified::text::TextDecorationLine; /// https://drafts.csswg.org/css-display/#independent-formatting-context #[derive(Debug, Serialize)] pub(crate) struct IndependentFormattingContext { - pub tag: OpaqueNode, + pub tag: Tag, #[serde(skip_serializing)] pub style: Arc<ComputedValues>, @@ -61,8 +60,7 @@ enum NonReplacedIFCKind<'a> { impl IndependentFormattingContext { pub fn construct<'dom>( context: &LayoutContext, - node: impl NodeExt<'dom>, - style: Arc<ComputedValues>, + info: &NodeAndStyleInfo<impl NodeExt<'dom>>, display_inside: DisplayInside, contents: Contents, content_sizes: ContentSizesRequest, @@ -73,15 +71,14 @@ impl IndependentFormattingContext { DisplayInside::Flow | DisplayInside::FlowRoot => { let (bfc, content_sizes) = BlockFormattingContext::construct( context, - node, - &style, + info, non_replaced, content_sizes, propagated_text_decoration_line, ); Self { - tag: node.as_opaque(), - style, + tag: Tag::from_node_and_style_info(info), + style: Arc::clone(&info.style), content_sizes, contents: IndependentFormattingContextContents::Flow(bfc), } @@ -89,25 +86,25 @@ impl IndependentFormattingContext { DisplayInside::Flex => { let (fc, content_sizes) = FlexContainer::construct( context, - node, - &style, + info, non_replaced, content_sizes, propagated_text_decoration_line, ); Self { - tag: node.as_opaque(), - style, + tag: Tag::from_node_and_style_info(info), + style: Arc::clone(&info.style), content_sizes, contents: IndependentFormattingContextContents::Flex(fc), } }, }, Err(replaced) => { - let content_sizes = content_sizes.compute(|| replaced.inline_content_sizes(&style)); + let content_sizes = + content_sizes.compute(|| replaced.inline_content_sizes(&info.style)); Self { - tag: node.as_opaque(), - style, + tag: Tag::from_node_and_style_info(info), + style: Arc::clone(&info.style), content_sizes, contents: IndependentFormattingContextContents::Replaced(replaced), } @@ -117,8 +114,7 @@ impl IndependentFormattingContext { pub fn construct_for_text_runs<'dom>( context: &LayoutContext, - node: impl NodeExt<'dom>, - style: Arc<ComputedValues>, + info: &NodeAndStyleInfo<impl NodeExt<'dom>>, runs: impl Iterator<Item = crate::flow::inline::TextRun>, content_sizes: ContentSizesRequest, propagated_text_decoration_line: TextDecorationLine, @@ -130,8 +126,8 @@ impl IndependentFormattingContext { propagated_text_decoration_line, ); Self { - tag: node.as_opaque(), - style, + tag: Tag::from_node_and_style_info(info), + style: Arc::clone(&info.style), content_sizes, contents: IndependentFormattingContextContents::Flow(bfc), } |