aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/construct_modern.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2025-05-12 11:38:50 +0200
committerGitHub <noreply@github.com>2025-05-12 09:38:50 +0000
commita0dd2c1bebbc238d2fe36b1134acfbc842c1f084 (patch)
tree367a47983a81113a4c4988ff8a11cca6de6f007d /components/layout/construct_modern.rs
parentdb83601b62b81965176e1e8272d5b434afeb0da6 (diff)
downloadservo-a0dd2c1bebbc238d2fe36b1134acfbc842c1f084.tar.gz
servo-a0dd2c1bebbc238d2fe36b1134acfbc842c1f084.zip
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>
Diffstat (limited to 'components/layout/construct_modern.rs')
-rw-r--r--components/layout/construct_modern.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/components/layout/construct_modern.rs b/components/layout/construct_modern.rs
index 1489d82635b..8f1282ec9f6 100644
--- a/components/layout/construct_modern.rs
+++ b/components/layout/construct_modern.rs
@@ -142,7 +142,7 @@ impl<'a, 'dom> ModernContainerBuilder<'a, 'dom> {
.filter_map(|job| match job {
ModernContainerJob::TextRuns(runs) => {
let mut inline_formatting_context_builder =
- InlineFormattingContextBuilder::new();
+ InlineFormattingContextBuilder::new(self.info);
for flex_text_run in runs.into_iter() {
inline_formatting_context_builder
.push_text(flex_text_run.text, &flex_text_run.info);