Bug 1371518 - Convert AnimationValue::from_computed_values to take an AnimatableLonghand; r?hiro
MozReview-Commit-ID: DUbp0QRW2mB
--- a/servo/components/style/gecko/wrapper.rs
+++ b/servo/components/style/gecko/wrapper.rs
@@ -1125,28 +1125,29 @@ impl<'le> TElement for GeckoElement<'le>
-> bool {
use properties::animated_properties::AnimatedProperty;
// We don't allow transitions on properties that are not interpolable.
if property.is_discrete() {
return false;
}
+ // |property| should be an animatable longhand
+ let animatable_longhand = AnimatableLonghand::from_transition_property(property).unwrap();
+
if existing_transitions.contains_key(property) {
// If there is an existing transition, update only if the end value differs.
// If the end value has not changed, we should leave the currently running
// transition as-is since we don't want to interrupt its timing function.
let after_value =
- Arc::new(AnimationValue::from_computed_values(property, after_change_style));
+ Arc::new(AnimationValue::from_computed_values(&animatable_longhand,
+ after_change_style));
return existing_transitions.get(property).unwrap() != &after_value;
}
- // |property| should be an animatable longhand
- let animatable_longhand = AnimatableLonghand::from_transition_property(property).unwrap();
-
combined_duration > 0.0f32 &&
AnimatedProperty::from_animatable_longhand(&animatable_longhand,
before_change_style,
after_change_style).does_animate()
}
#[inline]
fn lang_attr(&self) -> Option<AttrValue> {
--- a/servo/components/style/properties/helpers/animated_properties.mako.rs
+++ b/servo/components/style/properties/helpers/animated_properties.mako.rs
@@ -616,36 +616,34 @@ impl AnimationValue {
% endif
% endfor
}
},
_ => None // non animatable properties will get included because of shorthands. ignore.
}
}
- /// Get an AnimationValue for a TransitionProperty from a given computed values.
- pub fn from_computed_values(transition_property: &TransitionProperty,
+ /// Get an AnimationValue for a AnimatableLonghand from a given computed values.
+ pub fn from_computed_values(property: &AnimatableLonghand,
computed_values: &ComputedValues)
-> Self {
- match *transition_property {
- TransitionProperty::All => panic!("Can't use TransitionProperty::All here."),
+ match *property {
% for prop in data.longhands:
% if prop.animatable:
- TransitionProperty::${prop.camel_case} => {
+ AnimatableLonghand::${prop.camel_case} => {
AnimationValue::${prop.camel_case}(
% if prop.is_animatable_with_computed_value:
computed_values.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}())
% else:
From::from(computed_values.get_${prop.style_struct.ident.strip("_")}()
.clone_${prop.ident}()))
% endif
}
% endif
% endfor
- ref other => panic!("Can't use TransitionProperty::{:?} here.", other),
}
}
}
impl Animatable for AnimationValue {
fn add_weighted(&self, other: &Self, self_portion: f64, other_portion: f64)
-> Result<Self, ()> {
match (self, other) {
--- a/servo/ports/geckolib/glue.rs
+++ b/servo/ports/geckolib/glue.rs
@@ -683,18 +683,23 @@ pub extern "C" fn Servo_StyleSet_GetBase
.into_strong()
}
#[no_mangle]
pub extern "C" fn Servo_ComputedValues_ExtractAnimationValue(computed_values: ServoComputedValuesBorrowed,
property_id: nsCSSPropertyID)
-> RawServoAnimationValueStrong
{
+ let property = match AnimatableLonghand::from_nscsspropertyid(property_id) {
+ Some(longhand) => longhand,
+ None => { return Strong::null(); }
+ };
+
let computed_values = ComputedValues::as_arc(&computed_values);
- Arc::new(AnimationValue::from_computed_values(&property_id.into(), computed_values)).into_strong()
+ Arc::new(AnimationValue::from_computed_values(&property, computed_values)).into_strong()
}
#[no_mangle]
pub extern "C" fn Servo_Property_IsAnimatable(property: nsCSSPropertyID) -> bool {
use style::properties::animated_properties;
animated_properties::nscsspropertyid_is_animatable(property)
}