pub mod custom;
pub mod guides;
pub mod presets;
use crate::model::dimension::{Dimension, SixtieThousandthDeg};
use crate::model::ShapeGeometry;
use crate::render::dimension::Pt;
use crate::render::geometry::{PtOffset, PtRect, PtSize};
#[derive(Clone, Debug)]
pub struct ShapePath {
pub paths: Vec<SubPath>,
pub text_rect: Option<PtRect>,
}
#[derive(Clone, Debug)]
pub struct SubPath {
pub verbs: Vec<PathVerb>,
pub fill_mode: crate::model::PathFillMode,
pub stroked: bool,
}
#[derive(Clone, Debug)]
pub enum PathVerb {
MoveTo(PtOffset),
LineTo(PtOffset),
QuadTo(PtOffset, PtOffset),
CubicTo(PtOffset, PtOffset, PtOffset),
ArcTo {
radii: PtSize,
start_angle: Dimension<SixtieThousandthDeg>,
swing_angle: Dimension<SixtieThousandthDeg>,
},
Close,
}
pub fn build_geometry(geometry: &ShapeGeometry, extent: PtSize) -> Option<ShapePath> {
if extent.width <= Pt::ZERO && extent.height <= Pt::ZERO {
return None;
}
match geometry {
ShapeGeometry::Preset(def) => presets::build_preset(def, extent),
ShapeGeometry::Custom(def) => custom::build_custom(def, extent),
}
}