43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
//! Module containing definitions related to UI magnification via a [`ZoomFactor`].
|
|
|
|
use pathfinder_geometry::vector::Vector2F;
|
|
|
|
/// The zoom factor of the application. All UI elements are magnified by this value.
|
|
#[derive(Copy, Clone)]
|
|
pub struct ZoomFactor(f32);
|
|
|
|
impl ZoomFactor {
|
|
pub fn new(zoom_level: f32) -> Self {
|
|
Self(zoom_level)
|
|
}
|
|
}
|
|
|
|
impl Default for ZoomFactor {
|
|
fn default() -> Self {
|
|
Self(1.0)
|
|
}
|
|
}
|
|
|
|
/// Helper trait that scales a value by the given [`ZoomFactor`].
|
|
pub trait Scale: Sized {
|
|
/// Scales the current value up by the current [`ZoomFactor`].
|
|
fn scale_up(self, zoom_level: ZoomFactor) -> Self;
|
|
|
|
/// Scales the current value down by the current [`ZoomFactor`].
|
|
fn scale_down(self, zoom_level: ZoomFactor) -> Self {
|
|
self.scale_up(ZoomFactor::new(1.0 / zoom_level.0))
|
|
}
|
|
}
|
|
|
|
impl Scale for f32 {
|
|
fn scale_up(self, zoom_level: ZoomFactor) -> Self {
|
|
self * zoom_level.0
|
|
}
|
|
}
|
|
|
|
impl Scale for Vector2F {
|
|
fn scale_up(self, zoom_level: ZoomFactor) -> Self {
|
|
Vector2F::new(self.x() * zoom_level.0, self.y() * zoom_level.0)
|
|
}
|
|
}
|