mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
layout: Share styles to inline box children via SharedInlineStyles
(#36896)
`TextRun`s use their parent style to render. Previously, these styles were cloned and stored directly in the box tree `TextRun` and resulting `TextFragment`s. This presents a problem for incremental layout. Wrapping the style in another layer of shared ownership and mutability will allow updating all `TextFragment`s during repaint-only incremental layout by simply updating the box tree styles of the original text parents. This adds a new set of borrows when accessing text styles, but also makes it so that during box tree block construction `InlineFormattingContext`s are created lazily and now `InlineFormattingContextBuilder::finish` consumes the builder, making the API make a bit more sense. This should also improve performance of box tree block construction slightly. Testing: This should not change observable behavior and thus is covered by existing WPT tests. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
db83601b62
commit
a0dd2c1beb
24 changed files with 369 additions and 187 deletions
|
@ -22,6 +22,7 @@ use super::{
|
|||
Tag,
|
||||
};
|
||||
use crate::cell::ArcRefCell;
|
||||
use crate::flow::inline::SharedInlineStyles;
|
||||
use crate::geom::{LogicalSides, PhysicalPoint, PhysicalRect};
|
||||
use crate::style_ext::ComputedValuesExt;
|
||||
|
||||
|
@ -64,8 +65,7 @@ pub(crate) struct CollapsedMargin {
|
|||
#[derive(MallocSizeOf)]
|
||||
pub(crate) struct TextFragment {
|
||||
pub base: BaseFragment,
|
||||
#[conditional_malloc_size_of]
|
||||
pub parent_style: ServoArc<ComputedValues>,
|
||||
pub inline_styles: SharedInlineStyles,
|
||||
pub rect: PhysicalRect<Au>,
|
||||
pub font_metrics: FontMetrics,
|
||||
pub font_key: FontInstanceKey,
|
||||
|
@ -78,14 +78,11 @@ pub(crate) struct TextFragment {
|
|||
/// Extra space to add for each justification opportunity.
|
||||
pub justification_adjustment: Au,
|
||||
pub selection_range: Option<ServoRange<ByteIndex>>,
|
||||
#[conditional_malloc_size_of]
|
||||
pub selected_style: ServoArc<ComputedValues>,
|
||||
}
|
||||
|
||||
#[derive(MallocSizeOf)]
|
||||
pub(crate) struct ImageFragment {
|
||||
pub base: BaseFragment,
|
||||
#[conditional_malloc_size_of]
|
||||
pub style: ServoArc<ComputedValues>,
|
||||
pub rect: PhysicalRect<Au>,
|
||||
pub clip: PhysicalRect<Au>,
|
||||
|
@ -97,7 +94,6 @@ pub(crate) struct IFrameFragment {
|
|||
pub base: BaseFragment,
|
||||
pub pipeline_id: PipelineId,
|
||||
pub rect: PhysicalRect<Au>,
|
||||
#[conditional_malloc_size_of]
|
||||
pub style: ServoArc<ComputedValues>,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue