diff --git a/servo/components/style/properties/helpers.mako.rs b/servo/components/style/properties/helpers.mako.rs index 990e9e6646e6..8c6701497e47 100644 --- a/servo/components/style/properties/helpers.mako.rs +++ b/servo/components/style/properties/helpers.mako.rs @@ -9,7 +9,7 @@ <%def name="predefined_type(name, type, initial_value, parse_method='parse', needs_context=True, vector=False, computed_type=None, initial_specified_value=None, - allow_quirks=False, **kwargs)"> + allow_quirks=False, allow_empty=False, **kwargs)"> <%def name="predefined_type_inner(name, type, initial_value, parse_method)"> #[allow(unused_imports)] use app_units::Au; @@ -27,7 +27,9 @@ pub use values::computed::${type} as T; % endif } + % if initial_value: #[inline] pub fn get_initial_value() -> computed_value::T { ${initial_value} } + % endif % if initial_specified_value: #[inline] pub fn get_initial_specified_value() -> SpecifiedValue { ${initial_specified_value} } % endif @@ -46,7 +48,9 @@ } % if vector: - <%call expr="vector_longhand(name, predefined_type=type, **kwargs)"> + <%call + expr="vector_longhand(name, predefined_type=type, allow_empty=allow_empty or not initial_value, **kwargs)" + > ${predefined_type_inner(name, type, initial_value, parse_method)} % if caller: ${caller.body()} @@ -202,7 +206,7 @@ } pub fn get_initial_value() -> computed_value::T { - % if allow_empty: + % if allow_empty and allow_empty != "NotInitial": computed_value::T(SmallVec::new()) % else: let mut v = SmallVec::new(); diff --git a/servo/components/style/properties/longhand/box.mako.rs b/servo/components/style/properties/longhand/box.mako.rs index 4f0449ad0bf4..871eb37513db 100644 --- a/servo/components/style/properties/longhand/box.mako.rs +++ b/servo/components/style/properties/longhand/box.mako.rs @@ -429,17 +429,19 @@ ${helpers.predefined_type("transition-timing-function", extra_prefixes="moz webkit", spec="https://drafts.csswg.org/css-transitions/#propdef-transition-timing-function")} -${helpers.predefined_type("transition-property", - "TransitionProperty", - "computed::TransitionProperty::All", - initial_specified_value="specified::TransitionProperty::All", - vector=True, - allow_empty=True, - need_index=True, - needs_context=False, - animation_value_type="none", - extra_prefixes="moz webkit", - spec="https://drafts.csswg.org/css-transitions/#propdef-transition-property")} +${helpers.predefined_type( + "transition-property", + "TransitionProperty", + "computed::TransitionProperty::All", + initial_specified_value="specified::TransitionProperty::All", + vector=True, + allow_empty="NotInitial", + need_index=True, + needs_context=False, + animation_value_type="none", + extra_prefixes="moz webkit", + spec="https://drafts.csswg.org/css-transitions/#propdef-transition-property", +)} ${helpers.predefined_type("transition-delay", "Time", @@ -668,16 +670,17 @@ ${helpers.predefined_type("scroll-snap-destination", spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-destination)", animation_value_type="ComputedValue")} -${helpers.predefined_type("scroll-snap-coordinate", - "Position", - "computed::Position::zero()", - vector=True, - products="gecko", - spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-destination)", - animation_value_type="ComputedValue", - allow_empty=True, - delegate_animate=True)} - +${helpers.predefined_type( + "scroll-snap-coordinate", + "Position", + "computed::Position::zero()", + vector=True, + products="gecko", + spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-destination)", + animation_value_type="ComputedValue", + allow_empty="NotInitial", + delegate_animate=True, +)} <%helpers:longhand name="transform" extra_prefixes="webkit" animation_value_type="ComputedValue" diff --git a/servo/components/style/properties/longhand/inherited_svg.mako.rs b/servo/components/style/properties/longhand/inherited_svg.mako.rs index 3799c89d3ade..1d7fd7a985a2 100644 --- a/servo/components/style/properties/longhand/inherited_svg.mako.rs +++ b/servo/components/style/properties/longhand/inherited_svg.mako.rs @@ -88,17 +88,18 @@ ${helpers.predefined_type("stroke-opacity", "Opacity", "1.0", products="gecko", animation_value_type="ComputedValue", spec="https://www.w3.org/TR/SVG11/painting.html#StrokeOpacityProperty")} -${helpers.predefined_type("stroke-dasharray", - "LengthOrPercentageOrNumber", - "Either::First(0.0)", - "parse_non_negative", - vector="True", - delegate_animate="True", - allow_empty="True", - products="gecko", - animation_value_type="ComputedValue", - space_separated_allowed="True", - spec="https://www.w3.org/TR/SVG2/painting.html#StrokeDashing")} +${helpers.predefined_type( + "stroke-dasharray", + "LengthOrPercentageOrNumber", + None, + "parse_non_negative", + vector=True, + delegate_animate=True, + products="gecko", + animation_value_type="ComputedValue", + space_separated_allowed="True", + spec="https://www.w3.org/TR/SVG2/painting.html#StrokeDashing", +)} ${helpers.predefined_type( "stroke-dashoffset", "LengthOrPercentageOrNumber", diff --git a/servo/components/style/properties/properties.mako.rs b/servo/components/style/properties/properties.mako.rs index f7deb43d4925..4507ea5119a7 100644 --- a/servo/components/style/properties/properties.mako.rs +++ b/servo/components/style/properties/properties.mako.rs @@ -1765,7 +1765,9 @@ pub mod style_structs { /// Returns whether there are any transitions specified. #[cfg(feature = "servo")] pub fn specifies_transitions(&self) -> bool { - self.transition_property_count() > 0 + self.transition_duration_iter() + .take(self.transition_property_count()) + .any(|t| t.seconds() > 0.) } % endif }