Bug 1343751 - Make a macro for timing function. r?emilio
MozReview-Commit-ID: 6U4HTN0D0Vh
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -1337,32 +1337,54 @@ fn static_assert() {
-> longhands::${type}_${ident}::computed_value::SingleComputedValue {
use values::specified::Time;
Time(self.gecko.mAnimations[index].m${gecko_ffi_name} / 1000.)
}
${impl_animation_or_transition_count(type, ident, gecko_ffi_name)}
${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()) };
+
+ 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();
+ }
+ }
+ ${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()
+ }
+</%def>
+
<%def name="impl_transition_time_value(ident, gecko_ffi_name)">
${impl_animation_or_transition_time_value('transition', ident, gecko_ffi_name)}
</%def>
<%def name="impl_copy_animation_value(ident, gecko_ffi_name)">
${impl_copy_animation_or_transition_value('animation', ident, gecko_ffi_name)}
</%def>
<%def name="impl_animation_count(ident, gecko_ffi_name)">
${impl_animation_or_transition_count('animation', ident, gecko_ffi_name)}
</%def>
<%def name="impl_animation_time_value(ident, gecko_ffi_name)">
${impl_animation_or_transition_time_value('animation', ident, gecko_ffi_name)}
</%def>
+<%def name="impl_animation_timing_function()">
+ ${impl_animation_or_transition_timing_function('animation')}
+</%def>
+
<%def name="impl_animation_keyword(ident, gecko_ffi_name, keyword, cast_type='u8')">
#[allow(non_snake_case)]
pub fn set_animation_${ident}(&mut self, v: longhands::animation_${ident}::computed_value::T) {
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()) };
@@ -1813,31 +1835,17 @@ fn static_assert() {
AnimationIterationCount::Infinite
} else {
AnimationIterationCount::Number(self.gecko.mAnimations[index].mIterationCount)
}
}
${impl_animation_count('iteration_count', 'IterationCount')}
${impl_copy_animation_value('iteration_count', 'IterationCount')}
- pub fn set_animation_timing_function(&mut self, v: longhands::animation_timing_function::computed_value::T) {
- debug_assert!(!v.0.is_empty());
- unsafe { self.gecko.mAnimations.ensure_len(v.0.len()) };
-
- self.gecko.mAnimationTimingFunctionCount = v.0.len() as u32;
- for (servo, gecko) in v.0.into_iter().zip(self.gecko.mAnimations.iter_mut()) {
- gecko.mTimingFunction = servo.into();
- }
- }
- ${impl_animation_count('timing_function', 'TimingFunction')}
- ${impl_copy_animation_value('timing_function', 'TimingFunction')}
- pub fn animation_timing_function_at(&self, index: usize)
- -> longhands::animation_timing_function::computed_value::SingleComputedValue {
- self.gecko.mAnimations[index].mTimingFunction.into()
- }
+ ${impl_animation_timing_function()}
<% scroll_snap_type_keyword = Keyword("scroll-snap-type", "none mandatory proximity") %>
${impl_keyword('scroll_snap_type_y', 'mScrollSnapTypeY', scroll_snap_type_keyword, need_clone=False)}
pub fn set_perspective_origin(&mut self, v: longhands::perspective_origin::computed_value::T) {
self.gecko.mPerspectiveOrigin[0].set(v.horizontal);
self.gecko.mPerspectiveOrigin[1].set(v.vertical);