diff options
author | 2020-05-19 19:55:05 +0200 | |
---|---|---|
committer | 2020-05-19 19:55:05 +0200 | |
commit | 750a441a8c7c76b240db238283e9cbdab8d6932d (patch) | |
tree | f0e43b25375d1eace3e3d4871e7c19e01268f986 /graphics/src/transformation.rs | |
parent | 05af8d00d4c0f7b8e0ece85224fd90a92da86da8 (diff) | |
download | iced-750a441a8c7c76b240db238283e9cbdab8d6932d.tar.gz iced-750a441a8c7c76b240db238283e9cbdab8d6932d.tar.bz2 iced-750a441a8c7c76b240db238283e9cbdab8d6932d.zip |
Move `Transformation` to `iced_graphics`
Diffstat (limited to 'graphics/src/transformation.rs')
-rw-r--r-- | graphics/src/transformation.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/graphics/src/transformation.rs b/graphics/src/transformation.rs new file mode 100644 index 00000000..ff3b1d00 --- /dev/null +++ b/graphics/src/transformation.rs @@ -0,0 +1,54 @@ +use glam::{Mat4, Vec3, Vec4}; +use std::ops::Mul; + +/// A 2D transformation matrix. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct Transformation(Mat4); + +impl Transformation { + /// Get the identity transformation. + pub fn identity() -> Transformation { + Transformation(Mat4::identity()) + } + + /// Creates an orthographic projection. + #[rustfmt::skip] + pub fn orthographic(width: u32, height: u32) -> Transformation { + Transformation(Mat4::from_cols( + Vec4::new(2.0 / width as f32, 0.0, 0.0, 0.0), + Vec4::new(0.0, -2.0 / height as f32, 0.0, 0.0), + Vec4::new(0.0, 0.0, -1.0, 0.0), + Vec4::new(-1.0, 1.0, 0.0, 1.0) + )) + } + + /// Creates a translate transformation. + pub fn translate(x: f32, y: f32) -> Transformation { + Transformation(Mat4::from_translation(Vec3::new(x, y, 0.0))) + } + + /// Creates a scale transformation. + pub fn scale(x: f32, y: f32) -> Transformation { + Transformation(Mat4::from_scale(Vec3::new(x, y, 1.0))) + } +} + +impl Mul for Transformation { + type Output = Self; + + fn mul(self, rhs: Self) -> Self { + Transformation(self.0 * rhs.0) + } +} + +impl AsRef<[f32; 16]> for Transformation { + fn as_ref(&self) -> &[f32; 16] { + self.0.as_ref() + } +} + +impl From<Transformation> for [f32; 16] { + fn from(t: Transformation) -> [f32; 16] { + *t.as_ref() + } +} |