1use 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}