graphene/
euler.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use std::fmt;
4
5use glib::translate::*;
6
7use crate::{ffi, Euler, EulerOrder, Matrix, Quaternion, Vec3};
8
9impl Euler {
10    #[doc(alias = "graphene_euler_init")]
11    pub fn new(x: f32, y: f32, z: f32) -> Self {
12        assert_initialized_main_thread!();
13        unsafe {
14            let mut eul = Self::uninitialized();
15            ffi::graphene_euler_init(eul.to_glib_none_mut().0, x, y, z);
16            eul
17        }
18    }
19
20    #[doc(alias = "graphene_euler_init_from_matrix")]
21    #[doc(alias = "init_from_matrix")]
22    pub fn from_matrix(m: Option<&Matrix>, order: EulerOrder) -> Self {
23        assert_initialized_main_thread!();
24        unsafe {
25            let mut eul = Self::uninitialized();
26            ffi::graphene_euler_init_from_matrix(
27                eul.to_glib_none_mut().0,
28                m.to_glib_none().0,
29                order.into_glib(),
30            );
31            eul
32        }
33    }
34
35    #[doc(alias = "graphene_euler_init_from_quaternion")]
36    #[doc(alias = "init_from_quaternion")]
37    pub fn from_quaternion(q: Option<&Quaternion>, order: EulerOrder) -> Self {
38        assert_initialized_main_thread!();
39        unsafe {
40            let mut eul = Self::uninitialized();
41            ffi::graphene_euler_init_from_quaternion(
42                eul.to_glib_none_mut().0,
43                q.to_glib_none().0,
44                order.into_glib(),
45            );
46            eul
47        }
48    }
49
50    #[doc(alias = "graphene_euler_init_from_radians")]
51    #[doc(alias = "init_from_radians")]
52    pub fn from_radians(x: f32, y: f32, z: f32, order: EulerOrder) -> Self {
53        unsafe {
54            let mut eul = Self::uninitialized();
55            ffi::graphene_euler_init_from_radians(
56                eul.to_glib_none_mut().0,
57                x,
58                y,
59                z,
60                order.into_glib(),
61            );
62            eul
63        }
64    }
65
66    #[doc(alias = "graphene_euler_init_from_vec3")]
67    #[doc(alias = "init_from_vec3")]
68    pub fn from_vec3(v: Option<&Vec3>, order: EulerOrder) -> Self {
69        assert_initialized_main_thread!();
70        unsafe {
71            let mut eul = Self::uninitialized();
72            ffi::graphene_euler_init_from_vec3(
73                eul.to_glib_none_mut().0,
74                v.to_glib_none().0,
75                order.into_glib(),
76            );
77            eul
78        }
79    }
80
81    #[doc(alias = "graphene_euler_init_with_order")]
82    #[doc(alias = "init_with_order")]
83    pub fn with_order(x: f32, y: f32, z: f32, order: EulerOrder) -> Self {
84        assert_initialized_main_thread!();
85        unsafe {
86            let mut eul = Self::uninitialized();
87            ffi::graphene_euler_init_with_order(
88                eul.to_glib_none_mut().0,
89                x,
90                y,
91                z,
92                order.into_glib(),
93            );
94            eul
95        }
96    }
97}
98
99impl fmt::Debug for Euler {
100    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
101        f.debug_struct("Euler")
102            .field("order", &self.order())
103            .field("alpha", &self.alpha())
104            .field("beta", &self.beta())
105            .field("gamma", &self.gamma())
106            .finish()
107    }
108}