aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorHiroyuki Ikezoe <hiikezoe@mozilla-japan.org>2017-01-06 19:51:53 +0900
committerHiroyuki Ikezoe <hikezoe@mozilla.com>2017-01-10 12:24:59 +0900
commitff0819b2d4fc419cf6e8dd97f4f363ac2f13c110 (patch)
treec9038a6944f227eeaed9edcf136908f971e9e705 /components
parent98ed44059756ac4c44208fbcbda7f75ccdaf3ab0 (diff)
downloadservo-ff0819b2d4fc419cf6e8dd97f4f363ac2f13c110.tar.gz
servo-ff0819b2d4fc419cf6e8dd97f4f363ac2f13c110.zip
Add impl From<nsTimingFunction> for TransitionTimingFunction and impl From<TransitionTimingFunction> for nsTimingFunction. r=heycam
Diffstat (limited to 'components')
-rw-r--r--components/style/gecko_bindings/sugar/mod.rs1
-rw-r--r--components/style/gecko_bindings/sugar/ns_timing_function.rs70
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 }))
+ },
+ }
+ }
+}