use cursive::*;
pub type Vec2f = XY<f64>;
pub trait Vec2fUtilities {
fn into_vec2(self) -> Vec2;
fn scale(self, scale: f64) -> Self;
fn scale_vec(self, scale: Self) -> Self;
fn reverse_scale_vec(self, scale: Self) -> Self;
fn scale_to_fit(self, constraint: Self) -> Self;
fn aspect_ratio(self) -> f64;
fn x_over_y(self) -> f64;
}
impl Vec2fUtilities for Vec2f {
fn into_vec2(self) -> Vec2 {
(self.x.round() as usize, self.y.round() as usize).into()
}
fn scale(self, scale: f64) -> Self {
(self.x * scale, self.y * scale).into()
}
fn scale_vec(self, scale: Self) -> Self {
(self.x * scale.x, self.y * scale.y).into()
}
fn reverse_scale_vec(self, scale: Self) -> Self {
(self.x / scale.x, self.y / scale.y).into()
}
fn scale_to_fit(self, constraint: Self) -> Self {
if constraint.x_over_y() > self.x_over_y() {
(self.x * constraint.y / self.y, constraint.y).into()
} else {
(constraint.x, self.y * constraint.x / self.x).into()
}
}
fn aspect_ratio(self) -> f64 {
self.y / self.x
}
fn x_over_y(self) -> f64 {
self.x / self.y
}
}
pub trait Vec2Utilities {
fn into_vec2f(self) -> Vec2f;
}
impl Vec2Utilities for Vec2 {
fn into_vec2f(self) -> Vec2f {
(self.x as f64, self.y as f64).into()
}
}