Bug 1346655 - Fill shortage values for animation/transition properties. r?heycam
MozReview-Commit-ID: KPOS4eiLuhv
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -1308,19 +1308,20 @@ fn static_assert() {
</%def>
<%def name="impl_animation_or_transition_time_value(type, ident, gecko_ffi_name)">
#[allow(non_snake_case)]
pub fn set_${type}_${ident}(&mut self, v: longhands::${type}_${ident}::computed_value::T) {
debug_assert!(!v.0.is_empty());
unsafe { self.gecko.m${type.capitalize()}s.ensure_len(v.0.len()) };
+ let input_len = v.0.len();
self.gecko.m${type.capitalize()}${gecko_ffi_name}Count = v.0.len() as u32;
- for (servo, gecko) in v.0.into_iter().zip(self.gecko.m${type.capitalize()}s.iter_mut()) {
- gecko.m${gecko_ffi_name} = servo.seconds() * 1000.;
+ for (i, gecko) in self.gecko.m${type.capitalize()}s.iter_mut().enumerate() {
+ gecko.m${gecko_ffi_name} = v.0[i % input_len].seconds() * 1000.;
}
}
#[allow(non_snake_case)]
pub fn ${type}_${ident}_at(&self, index: usize)
-> longhands::${type}_${ident}::computed_value::SingleComputedValue {
use values::specified::Time;
Time(self.gecko.m${type.capitalize()}s[index].m${gecko_ffi_name} / 1000.)
}
@@ -1328,19 +1329,20 @@ fn static_assert() {
${impl_copy_animation_or_transition_value(type, ident, gecko_ffi_name)}
</%def>
<%def name="impl_animation_or_transition_timing_function(type)">
pub fn set_${type}_timing_function(&mut self, v: longhands::${type}_timing_function::computed_value::T) {
debug_assert!(!v.0.is_empty());
unsafe { self.gecko.m${type.capitalize()}s.ensure_len(v.0.len()) };
+ let input_len = v.0.len();
self.gecko.m${type.capitalize()}TimingFunctionCount = v.0.len() as u32;
- for (servo, gecko) in v.0.into_iter().zip(self.gecko.m${type.capitalize()}s.iter_mut()) {
- gecko.mTimingFunction = servo.into();
+ for (i, gecko) in self.gecko.m${type.capitalize()}s.iter_mut().enumerate() {
+ gecko.mTimingFunction = v.0[i % input_len].into();
}
}
${impl_animation_or_transition_count(type, 'timing_function', 'TimingFunction')}
${impl_copy_animation_or_transition_value(type, 'timing_function', 'TimingFunction')}
pub fn ${type}_timing_function_at(&self, index: usize)
-> longhands::${type}_timing_function::computed_value::SingleComputedValue {
self.gecko.m${type.capitalize()}s[index].mTimingFunction.into()
}
@@ -1380,18 +1382,19 @@ fn static_assert() {
use properties::longhands::animation_${ident}::single_value::computed_value::T as Keyword;
use gecko_bindings::structs;
debug_assert!(!v.0.is_empty());
unsafe { self.gecko.mAnimations.ensure_len(v.0.len()) };
self.gecko.mAnimation${gecko_ffi_name}Count = v.0.len() as u32;
- for (servo, gecko) in v.0.into_iter().zip(self.gecko.mAnimations.iter_mut()) {
- let result = match servo {
+ let input_len = v.0.len();
+ for (i, gecko) in self.gecko.mAnimations.iter_mut().enumerate() {
+ let result = match v.0[i % input_len] {
% for value in keyword.gecko_values():
Keyword::${to_rust_ident(value)} =>
structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast(cast_type)},
% endfor
};
gecko.m${gecko_ffi_name} = result;
}
}
@@ -1844,19 +1847,20 @@ fn static_assert() {
pub fn set_animation_iteration_count(&mut self, v: longhands::animation_iteration_count::computed_value::T) {
use std::f32;
use properties::longhands::animation_iteration_count::single_value::SpecifiedValue as AnimationIterationCount;
debug_assert!(!v.0.is_empty());
unsafe { self.gecko.mAnimations.ensure_len(v.0.len()) };
+ let input_len = v.0.len();
self.gecko.mAnimationIterationCountCount = v.0.len() as u32;
- for (servo, gecko) in v.0.into_iter().zip(self.gecko.mAnimations.iter_mut()) {
- match servo {
+ for (i, gecko) in self.gecko.mAnimations.iter_mut().enumerate() {
+ match v.0[i % input_len] {
AnimationIterationCount::Number(n) => gecko.mIterationCount = n,
AnimationIterationCount::Infinite => gecko.mIterationCount = f32::INFINITY,
}
}
}
pub fn animation_iteration_count_at(&self, index: usize)
-> longhands::animation_iteration_count::computed_value::SingleComputedValue {
use properties::longhands::animation_iteration_count::single_value::computed_value::T