mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +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
|
@ -38,6 +38,7 @@ pub use flow::BoxTree;
|
|||
pub use fragment_tree::FragmentTree;
|
||||
pub use layout_impl::LayoutFactoryImpl;
|
||||
use malloc_size_of_derive::MallocSizeOf;
|
||||
use servo_arc::Arc as ServoArc;
|
||||
use style::logical_geometry::WritingMode;
|
||||
use style::properties::ComputedValues;
|
||||
use style::values::computed::TextDecorationLine;
|
||||
|
@ -45,6 +46,16 @@ use style::values::computed::TextDecorationLine;
|
|||
use crate::geom::{LogicalVec2, SizeConstraint};
|
||||
use crate::style_ext::AspectRatio;
|
||||
|
||||
/// At times, a style is "owned" by more than one layout object. For example, text
|
||||
/// fragments need a handle on their parent inline box's style. In order to make
|
||||
/// incremental layout easier to implement, another layer of shared ownership is added via
|
||||
/// [`SharedStyle`]. This allows updating the style in originating layout object and
|
||||
/// having all "depdendent" objects update automatically.
|
||||
///
|
||||
/// Note that this is not a cost-free data structure, so should only be
|
||||
/// used when necessary.
|
||||
pub(crate) type SharedStyle = ArcRefCell<ServoArc<ComputedValues>>;
|
||||
|
||||
/// Represents the set of constraints that we use when computing the min-content
|
||||
/// and max-content inline sizes of an element.
|
||||
pub(crate) struct ConstraintSpace {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue