1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
// Take a look at the license at the top of the repository in the LICENSE file.
use std::fmt;
use glib::translate::*;
use crate::{Vec2, Vec3, Vec4};
impl Vec4 {
/// Initializes a [`Vec4`][crate::Vec4] using the given values.
///
/// This function can be called multiple times.
/// ## `x`
/// the X field of the vector
/// ## `y`
/// the Y field of the vector
/// ## `z`
/// the Z field of the vector
/// ## `w`
/// the W field of the vector
///
/// # Returns
///
/// a pointer to the initialized
/// vector
#[doc(alias = "graphene_vec4_init")]
pub fn new(x: f32, y: f32, z: f32, w: f32) -> Self {
assert_initialized_main_thread!();
unsafe {
let mut vec = Self::uninitialized();
ffi::graphene_vec4_init(vec.to_glib_none_mut().0, x, y, z, w);
vec
}
}
/// Initializes a [`Vec4`][crate::Vec4] using the components of a
/// [`Vec2`][crate::Vec2] and the values of `z` and `w`.
/// ## `src`
/// a [`Vec2`][crate::Vec2]
/// ## `z`
/// the value for the third component of `self`
/// ## `w`
/// the value for the fourth component of `self`
///
/// # Returns
///
/// the initialized vector
#[doc(alias = "graphene_vec4_init_from_vec2")]
#[doc(alias = "init_from_vec2")]
pub fn from_vec2(src: &Vec2, z: f32, w: f32) -> Self {
assert_initialized_main_thread!();
unsafe {
let mut vec = Self::uninitialized();
ffi::graphene_vec4_init_from_vec2(vec.to_glib_none_mut().0, src.to_glib_none().0, z, w);
vec
}
}
/// Initializes a [`Vec4`][crate::Vec4] using the components of a
/// [`Vec3`][crate::Vec3] and the value of `w`.
/// ## `src`
/// a [`Vec3`][crate::Vec3]
/// ## `w`
/// the value for the fourth component of `self`
///
/// # Returns
///
/// the initialized vector
#[doc(alias = "graphene_vec4_init_from_vec3")]
#[doc(alias = "init_from_vec3")]
pub fn from_vec3(src: &Vec3, w: f32) -> Self {
assert_initialized_main_thread!();
unsafe {
let mut vec = Self::uninitialized();
ffi::graphene_vec4_init_from_vec3(vec.to_glib_none_mut().0, src.to_glib_none().0, w);
vec
}
}
/// Initializes a [`Vec4`][crate::Vec4] with the values inside the given array.
/// ## `src`
/// an array of four floating point values
///
/// # Returns
///
/// the initialized vector
#[doc(alias = "graphene_vec4_init_from_float")]
#[doc(alias = "init_from_float")]
pub fn from_float(src: [f32; 4]) -> Self {
assert_initialized_main_thread!();
unsafe {
let mut vec = Self::uninitialized();
ffi::graphene_vec4_init_from_float(vec.to_glib_none_mut().0, src.as_ptr() as *const _);
vec
}
}
/// Stores the components of the given [`Vec4`][crate::Vec4] into an array
/// of floating point values.
///
/// # Returns
///
///
/// ## `dest`
/// return location for
/// an array of floating point values
#[doc(alias = "graphene_vec4_to_float")]
pub fn to_float(&self) -> [f32; 4] {
unsafe {
let mut out = std::mem::MaybeUninit::uninit();
ffi::graphene_vec4_to_float(self.to_glib_none().0, out.as_mut_ptr());
out.assume_init()
}
}
}
impl fmt::Debug for Vec4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Vec4")
.field("x", &self.x())
.field("y", &self.y())
.field("z", &self.z())
.field("w", &self.w())
.finish()
}
}
impl Default for Vec4 {
fn default() -> Self {
Self::zero()
}
}