Bug 1371518 - Introduce AnimatableLonghand type; r?hiro
This type, which we will use in the next patch in this series, can represent
only longhands whose animation type is not "none". By introducing this type,
we can later restrict the meaning of TransitionProperty to only cover properties
whose animation type is not "none" OR "discrete" (since currently CSS
transitions should not animate properties whose animation type is discrete).
Doing so will also mean that CSS transitions ignore the 'display' property by
default.
Furthermore, introducing this type will allow the animation code to clearly
document when a property is allowed to be a shorthand or unanimatable property
and when it is expected to be an animatable longhand. This, in turn, will allow
us to remove a few no-longer-necessary checks and simplify the code.
MozReview-Commit-ID: 96aVio9EED
--- a/servo/components/style/properties/helpers/animated_properties.mako.rs
+++ b/servo/components/style/properties/helpers/animated_properties.mako.rs
@@ -41,16 +41,30 @@ use values::computed::{Angle, LengthOrPe
use values::computed::{BorderCornerRadius, ClipRect};
use values::computed::{CalcLengthOrPercentage, Color, Context, ComputedValueAsSpecified};
use values::computed::{LengthOrPercentage, MaxLength, MozLength, Shadow, ToComputedValue};
use values::generics::{SVGPaint, SVGPaintKind};
use values::generics::border::BorderCornerRadius as GenericBorderCornerRadius;
use values::generics::position as generic_position;
+/// A longhand property whose animation type is not "none".
+///
+/// NOTE: This includes the 'display' property since it is animatable from SMIL even though it is
+/// not animatable from CSS animations or Web Animations. CSS transitions also does not allow
+/// animating 'display', but for CSS transitions we have the separate TransitionProperty type.
+pub enum AnimatableLonghand {
+ % for prop in data.longhands:
+ % if prop.animatable:
+ /// ${prop.name}
+ ${prop.camel_case},
+ % endif
+ % endfor
+}
+
/// A given transition property, that is either `All`, an animatable longhand property,
/// a shorthand with at least one animatable longhand component, or an unsupported property.
// NB: This needs to be here because it needs all the longhands generated
// beforehand.
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
pub enum TransitionProperty {
/// All, any animatable property changing should generate a transition.