diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/style/gecko_bindings/sugar/mod.rs | 1 | ||||
-rw-r--r-- | components/style/gecko_bindings/sugar/ns_timing_function.rs | 70 |
2 files changed, 71 insertions, 0 deletions
diff --git a/components/style/gecko_bindings/sugar/mod.rs b/components/style/gecko_bindings/sugar/mod.rs index b4c94dcbe70..623125c396e 100644 --- a/components/style/gecko_bindings/sugar/mod.rs +++ b/components/style/gecko_bindings/sugar/mod.rs @@ -9,6 +9,7 @@ mod ns_css_shadow_array; mod ns_style_auto_array; pub mod ns_style_coord; mod ns_t_array; +mod ns_timing_function; pub mod ownership; pub mod refptr; mod style_complex_color; diff --git a/components/style/gecko_bindings/sugar/ns_timing_function.rs b/components/style/gecko_bindings/sugar/ns_timing_function.rs new file mode 100644 index 00000000000..8dc7c2b792d --- /dev/null +++ b/components/style/gecko_bindings/sugar/ns_timing_function.rs @@ -0,0 +1,70 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use euclid::point::TypedPoint2D; +use gecko_bindings::structs::{nsTimingFunction, nsTimingFunction_Type}; +use properties::longhands::transition_timing_function::single_value::computed_value::StartEnd; +use properties::longhands::transition_timing_function::single_value::computed_value::T as TransitionTimingFunction; +use std::mem; + +impl From<TransitionTimingFunction> for nsTimingFunction { + fn from(function: TransitionTimingFunction) -> nsTimingFunction { + let mut tf: nsTimingFunction = unsafe { mem::zeroed() }; + + match function { + TransitionTimingFunction::Steps(steps, StartEnd::Start) => { + tf.mType = nsTimingFunction_Type::StepStart; + unsafe { + tf.__bindgen_anon_1.__bindgen_anon_1.as_mut().mSteps = steps; + } + }, + TransitionTimingFunction::Steps(steps, StartEnd::End) => { + tf.mType = nsTimingFunction_Type::StepEnd; + unsafe { + tf.__bindgen_anon_1.__bindgen_anon_1.as_mut().mSteps = steps; + } + }, + TransitionTimingFunction::CubicBezier(p1, p2) => { + tf.mType = nsTimingFunction_Type::CubicBezier; + let ref mut gecko_cubic_bezier = + unsafe { tf.__bindgen_anon_1.mFunc.as_mut() }; + gecko_cubic_bezier.mX1 = p1.x; + gecko_cubic_bezier.mY1 = p1.y; + gecko_cubic_bezier.mX2 = p2.x; + gecko_cubic_bezier.mY2 = p2.y; + }, + // FIXME: we need to add more types once TransitionTimingFunction + // has more types. + } + tf + } +} + +impl From<nsTimingFunction> for TransitionTimingFunction { + fn from(function: nsTimingFunction) -> TransitionTimingFunction { + match function.mType { + nsTimingFunction_Type::StepStart => { + TransitionTimingFunction::Steps(unsafe { function.__bindgen_anon_1.__bindgen_anon_1.as_ref().mSteps }, + StartEnd::Start) + }, + nsTimingFunction_Type::StepEnd => { + TransitionTimingFunction::Steps(unsafe { function.__bindgen_anon_1.__bindgen_anon_1.as_ref().mSteps }, + StartEnd::End) + }, + // FIXME: As above, we need to fix here. + nsTimingFunction_Type::Ease | + nsTimingFunction_Type::Linear | + nsTimingFunction_Type::EaseIn | + nsTimingFunction_Type::EaseOut | + nsTimingFunction_Type::EaseInOut | + nsTimingFunction_Type::CubicBezier => { + TransitionTimingFunction::CubicBezier( + TypedPoint2D::new(unsafe { function.__bindgen_anon_1.mFunc.as_ref().mX1 }, + unsafe { function.__bindgen_anon_1.mFunc.as_ref().mY1 }), + TypedPoint2D::new(unsafe { function.__bindgen_anon_1.mFunc.as_ref().mX2 }, + unsafe { function.__bindgen_anon_1.mFunc.as_ref().mY2 })) + }, + } + } +} |