From a90a5cba08fdf6c0ceb95101c275108a152a3aed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:35:37 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- servo/components/style/data.rs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'servo/components/style/data.rs') diff --git a/servo/components/style/data.rs b/servo/components/style/data.rs index ceddc5bd20..366318b658 100644 --- a/servo/components/style/data.rs +++ b/servo/components/style/data.rs @@ -45,6 +45,9 @@ bitflags! { /// The former gives us stronger transitive guarantees that allows us to /// apply the style sharing cache to cousins. const PRIMARY_STYLE_REUSED_VIA_RULE_NODE = 1 << 2; + + /// Whether this element may have matched rules inside @starting-style. + const MAY_HAVE_STARTING_STYLE = 1 << 3; } } @@ -344,22 +347,28 @@ impl ElementData { let reused_via_rule_node = self .flags .contains(ElementDataFlags::PRIMARY_STYLE_REUSED_VIA_RULE_NODE); + let may_have_starting_style = self + .flags + .contains(ElementDataFlags::MAY_HAVE_STARTING_STYLE); PrimaryStyle { style: ResolvedStyle(self.styles.primary().clone()), reused_via_rule_node, + may_have_starting_style, } } /// Sets a new set of styles, returning the old ones. pub fn set_styles(&mut self, new_styles: ResolvedElementStyles) -> ElementStyles { - if new_styles.primary.reused_via_rule_node { - self.flags - .insert(ElementDataFlags::PRIMARY_STYLE_REUSED_VIA_RULE_NODE); - } else { - self.flags - .remove(ElementDataFlags::PRIMARY_STYLE_REUSED_VIA_RULE_NODE); - } + self.flags.set( + ElementDataFlags::PRIMARY_STYLE_REUSED_VIA_RULE_NODE, + new_styles.primary.reused_via_rule_node, + ); + self.flags.set( + ElementDataFlags::MAY_HAVE_STARTING_STYLE, + new_styles.primary.may_have_starting_style, + ); + mem::replace(&mut self.styles, new_styles.into()) } @@ -542,4 +551,11 @@ impl ElementData { n } + + /// Returns true if this element data may need to compute the starting style for CSS + /// transitions. + #[inline] + pub fn may_have_starting_style(&self) -> bool { + self.flags.contains(ElementDataFlags::MAY_HAVE_STARTING_STYLE) + } } -- cgit v1.2.3