vsvg 0.5.0

Core library for pen-plotter graphics.
Documentation
use super::{DocumentMetadata, DocumentTrait, LayerID};
use crate::{FlattenedLayer, FlattenedPath, Polyline, Transforms};
use std::collections::BTreeMap;

#[derive(Default, Clone, Debug)]
pub struct FlattenedDocument {
    pub layers: BTreeMap<LayerID, FlattenedLayer>,
    pub(crate) metadata: DocumentMetadata,
}

impl FlattenedDocument {
    #[must_use]
    pub fn new(layers: BTreeMap<LayerID, FlattenedLayer>, metadata: DocumentMetadata) -> Self {
        Self { layers, metadata }
    }
}

impl Transforms for FlattenedDocument {
    fn transform(&mut self, affine: &kurbo::Affine) -> &mut Self {
        self.layers.iter_mut().for_each(|(_, layer)| {
            layer.transform(affine);
        });
        self
    }
}

impl DocumentTrait<FlattenedLayer, FlattenedPath, Polyline> for FlattenedDocument {
    fn layers(&self) -> &BTreeMap<LayerID, FlattenedLayer> {
        &self.layers
    }

    fn layers_mut(&mut self) -> &mut BTreeMap<LayerID, FlattenedLayer> {
        &mut self.layers
    }

    fn metadata(&self) -> &DocumentMetadata {
        &self.metadata
    }

    fn metadata_mut(&mut self) -> &mut DocumentMetadata {
        &mut self.metadata
    }
}