- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
pub trait Normalize<T> {
type Output;
fn normalize(&self, baseline_value: &T) -> Self::Output;
fn denormalize(&self, baseline_value: &T) -> Self::Output;
}
impl<T, U, W> Normalize<T> for U
where
T: Copy,
U: Copy + Div<T, Output = W> + Mul<T, Output = W>,
{
type Output = W;
fn normalize(&self, baseline_value: &T) -> Self::Output { *self / *baseline_value }
fn denormalize(&self, baseline_value: &T) -> Self::Output { *self * *baseline_value }
}
impl<T> Normalize<CanvasSize<T>> for Rectangle
where
T: Copy,
f32: Normalize<T, Output = f32>
{
type Output = Rectangle;
fn normalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
Rectangle {
x1: self.x1.normalize(&baseline_value.width),
y1: self.y1.normalize(&baseline_value.height),
x2: self.x2.normalize(&baseline_value.width),
y2: self.y2.normalize(&baseline_value.height),
}
}
fn denormalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
Rectangle {
x1: self.x1.denormalize(&baseline_value.width),
y1: self.y1.denormalize(&baseline_value.height),
x2: self.x2.denormalize(&baseline_value.width),
y2: self.y2.denormalize(&baseline_value.height),
}
}
}