use crate::node_origin::normalize_node_origin;
const MAX_FIT_VIEW_PADDING: f32 = 0.45;
#[derive(Debug, Clone, Copy)]
pub struct FitViewComputeOptions {
pub viewport_width_px: f32,
pub viewport_height_px: f32,
pub node_origin: (f32, f32),
pub padding: f32,
pub margin_px_fallback: f32,
pub min_zoom: f32,
pub max_zoom: f32,
}
impl FitViewComputeOptions {
pub fn normalized(mut self) -> Option<Self> {
if !self.viewport_width_px.is_finite()
|| !self.viewport_height_px.is_finite()
|| self.viewport_width_px <= 1.0
|| self.viewport_height_px <= 1.0
{
return None;
}
self.node_origin = normalize_node_origin(self.node_origin);
if !self.margin_px_fallback.is_finite() || self.margin_px_fallback < 0.0 {
self.margin_px_fallback = 0.0;
}
if !self.padding.is_finite() {
self.padding = 0.0;
}
self.padding = self.padding.clamp(0.0, MAX_FIT_VIEW_PADDING);
if !self.min_zoom.is_finite() || self.min_zoom <= 0.0 {
self.min_zoom = 1.0;
}
if !self.max_zoom.is_finite() || self.max_zoom <= 0.0 {
self.max_zoom = 1.0;
}
if self.min_zoom > self.max_zoom {
std::mem::swap(&mut self.min_zoom, &mut self.max_zoom);
}
Some(self)
}
}