use std::rc::Rc;
use taffy::Size;
use typed_builder::TypedBuilder;
use crate::{Viewport, style::CalcArena};
#[derive(Clone, TypedBuilder)]
pub struct SizingContext {
pub viewport: Viewport,
#[builder(default)]
pub container_size: Size<Option<f32>>,
#[builder(default = viewport.font_size * viewport.device_pixel_ratio)]
pub font_size: f32,
#[builder(default)]
pub root_font_size: Option<f32>,
#[builder(default = viewport.font_size * viewport.device_pixel_ratio)]
pub line_height: f32,
#[builder(default)]
pub root_line_height: Option<f32>,
#[builder(default)]
pub calc_arena: Rc<CalcArena>,
}
impl SizingContext {
pub fn rem_basis(&self) -> f32 {
self
.root_font_size
.unwrap_or(self.viewport.font_size * self.viewport.device_pixel_ratio)
}
pub fn root_line_height_basis(&self) -> f32 {
self.root_line_height.unwrap_or(self.line_height)
}
pub fn query_container_width(&self) -> f32 {
self
.container_size
.width
.unwrap_or(self.viewport.size.width.unwrap_or_default() as f32)
}
pub fn query_container_height(&self) -> f32 {
self
.container_size
.height
.unwrap_or(self.viewport.size.height.unwrap_or_default() as f32)
}
}