Struct layout_2020::flow::construct::BlockContainerBuilder
source · pub(crate) struct BlockContainerBuilder<'dom, 'style, Node> {
context: &'style LayoutContext<'style>,
info: &'style NodeAndStyleInfo<Node>,
block_level_boxes: Vec<BlockLevelJob<'dom, Node>>,
have_already_seen_first_line_for_text_indent: bool,
text_decoration_line: TextDecorationLine,
inline_formatting_context_builder: InlineFormattingContextBuilder,
anonymous_style: Option<Arc<ComputedValues>>,
anonymous_table_content: Vec<AnonymousTableContent<'dom, Node>>,
}
Expand description
A builder for a block container.
This builder starts from the first child of a given DOM node and does a preorder traversal of all of its inclusive siblings.
Fields§
§context: &'style LayoutContext<'style>
§info: &'style NodeAndStyleInfo<Node>
This NodeAndStyleInfo contains the root node, the corresponding pseudo content designator, and the block container style.
block_level_boxes: Vec<BlockLevelJob<'dom, Node>>
The list of block-level boxes to be built for the final block container.
Contains all the block-level jobs we found traversing the tree
so far, if this is empty at the end of the traversal and the ongoing
inline formatting context is not empty, the block container establishes
an inline formatting context (see end of build
).
DOM nodes which represent block-level boxes are immediately pushed
to this list with their style without ever being traversed at this
point, instead we just move to their next sibling. If the DOM node
doesn’t have a next sibling, we either reached the end of the container
root or there are ongoing inline-level boxes
(see handle_block_level_element
).
have_already_seen_first_line_for_text_indent: bool
Whether or not this builder has yet produced a block which would be
be considered the first line for the purposes of text-indent
.
text_decoration_line: TextDecorationLine
The propagated TextDecorationLine
.
inline_formatting_context_builder: InlineFormattingContextBuilder
§anonymous_style: Option<Arc<ComputedValues>>
The style of the anonymous block boxes pushed to the list of block-level
boxes, if any (see end_ongoing_inline_formatting_context
).
anonymous_table_content: Vec<AnonymousTableContent<'dom, Node>>
A collection of content that is being added to an anonymous table. This is composed of any sequence of internal table elements or table captions that are found outside of a table.
Implementations§
source§impl<'dom, 'style, Node> BlockContainerBuilder<'dom, 'style, Node>where
Node: NodeExt<'dom>,
impl<'dom, 'style, Node> BlockContainerBuilder<'dom, 'style, Node>where
Node: NodeExt<'dom>,
pub(crate) fn new( context: &'style LayoutContext<'_>, info: &'style NodeAndStyleInfo<Node>, propagated_text_decoration_line: TextDecorationLine, ) -> Self
pub(crate) fn finish(self) -> BlockContainer
fn finish_anonymous_table_if_needed(&mut self)
source§impl<'dom, Node> BlockContainerBuilder<'dom, '_, Node>where
Node: NodeExt<'dom>,
impl<'dom, Node> BlockContainerBuilder<'dom, '_, Node>where
Node: NodeExt<'dom>,
fn handle_list_item_marker_inside( &mut self, info: &NodeAndStyleInfo<Node>, contents: Vec<PseudoElementContentItem>, )
fn handle_list_item_marker_outside( &mut self, info: &NodeAndStyleInfo<Node>, contents: Vec<PseudoElementContentItem>, )
fn handle_inline_level_element( &mut self, info: &NodeAndStyleInfo<Node>, display_inside: DisplayInside, contents: Contents, box_slot: BoxSlot<'dom>, )
fn handle_block_level_element( &mut self, info: &NodeAndStyleInfo<Node>, display_inside: DisplayInside, contents: Contents, box_slot: BoxSlot<'dom>, )
fn handle_absolutely_positioned_element( &mut self, info: &NodeAndStyleInfo<Node>, display_inside: DisplayInside, contents: Contents, box_slot: BoxSlot<'dom>, )
fn handle_float_element( &mut self, info: &NodeAndStyleInfo<Node>, display_inside: DisplayInside, contents: Contents, box_slot: BoxSlot<'dom>, )
fn end_ongoing_inline_formatting_context(&mut self)
fn push_block_level_job_for_inline_formatting_context( &mut self, inline_formatting_context: InlineFormattingContext, )
Trait Implementations§
source§impl<'dom, Node> TraversalHandler<'dom, Node> for BlockContainerBuilder<'dom, '_, Node>where
Node: NodeExt<'dom>,
impl<'dom, Node> TraversalHandler<'dom, Node> for BlockContainerBuilder<'dom, '_, Node>where
Node: NodeExt<'dom>,
source§fn handle_element(
&mut self,
info: &NodeAndStyleInfo<Node>,
display: DisplayGeneratingBox,
contents: Contents,
box_slot: BoxSlot<'dom>,
)
fn handle_element( &mut self, info: &NodeAndStyleInfo<Node>, display: DisplayGeneratingBox, contents: Contents, box_slot: BoxSlot<'dom>, )
fn handle_text(&mut self, info: &NodeAndStyleInfo<Node>, text: Cow<'dom, str>)
Auto Trait Implementations§
impl<'dom, 'style, Node> Freeze for BlockContainerBuilder<'dom, 'style, Node>
impl<'dom, 'style, Node> !RefUnwindSafe for BlockContainerBuilder<'dom, 'style, Node>
impl<'dom, 'style, Node> Send for BlockContainerBuilder<'dom, 'style, Node>
impl<'dom, 'style, Node> Sync for BlockContainerBuilder<'dom, 'style, Node>where
Node: Sync,
impl<'dom, 'style, Node> Unpin for BlockContainerBuilder<'dom, 'style, Node>where
Node: Unpin,
impl<'dom, 'style, Node> !UnwindSafe for BlockContainerBuilder<'dom, 'style, Node>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more