diff options
author | 2020-05-19 14:23:28 +0200 | |
---|---|---|
committer | 2020-05-19 14:23:28 +0200 | |
commit | d4743183d40c6044ce6fa39e2a52919a32912cda (patch) | |
tree | d2dec81cd9b419262cf2aa57ad793895ccacb320 /glow/src/transformation.rs | |
parent | 33448508a524db6447b380cc236be6f0d5ca8a86 (diff) | |
download | iced-d4743183d40c6044ce6fa39e2a52919a32912cda.tar.gz iced-d4743183d40c6044ce6fa39e2a52919a32912cda.tar.bz2 iced-d4743183d40c6044ce6fa39e2a52919a32912cda.zip |
Draft first working version of `iced_glow` :tada:
Diffstat (limited to 'glow/src/transformation.rs')
-rw-r--r-- | glow/src/transformation.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/glow/src/transformation.rs b/glow/src/transformation.rs new file mode 100644 index 00000000..ff3b1d00 --- /dev/null +++ b/glow/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() + } +} |