mod asset;
mod image;
mod raster;
mod text;
use bevy::asset::Handle;
use bevy::ecs::component::Component;
use bevy::math::{UVec2, Vec2};
use bevy::ui::widget::ImageMeasure;
use bevy::ui::{ContentSize, NodeMeasure, VisualBox};
pub use asset::{SvgAssetLoader, SvgDocument, parse_svg_bytes};
pub(crate) use image::{ensure_svg_image, is_svg_src, warn_ignored_attrs};
pub use raster::{rasterize_document, stamp_svg_measures, update_svg_surfaces};
#[cfg(test)]
pub(crate) const CIRCLE_SVG: &str = r##"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle cx="50" cy="50" r="40" fill="#f00"/></svg>"##;
#[derive(Component)]
pub struct SvgSurface {
pub doc: Handle<SvgDocument>,
pub last_size: UVec2,
pub dirty: bool,
pub(crate) raster: crate::raster::RasterCache,
}
impl SvgSurface {
pub fn new(doc: Handle<SvgDocument>) -> Self {
Self {
doc,
last_size: UVec2::ZERO,
dirty: true,
raster: crate::raster::RasterCache::default(),
}
}
}
pub(crate) fn stamp_intrinsic_measure(
content_size: &mut ContentSize,
doc_size: Vec2,
scale_factor: f32,
visual_box: VisualBox,
) {
content_size.set(NodeMeasure::Image(ImageMeasure {
size: doc_size * scale_factor,
visual_box,
}));
}