# llimphi-svg *Read this in English: [README.md](README.md).* Puente fino entre `vello_svg` y Llimphi. `llimphi-icons` cubre el set canónico de ~50 íconos a mano (BezPath en grid 24×24). Para lo demás — íconos de apps `.desktop` arbitrarias, logotipos, assets de marca, exports vectoriales de pineal/cosmos — hace falta cargar SVG real. Este crate es el puente: parsea una vez con `vello_svg` y stampea la `vello::Scene` resultante en cualquier `View` escalándola al rect del nodo. ## Uso ```ignore use llimphi_svg::SvgAsset; // Parsea UNA vez (al cargar la app o el ícono): let svg = SvgAsset::from_str(include_str!("logo.svg")).expect("logo válido"); // Pintalo en un View tantas veces como quieras (escala al rect): View::new(style).children(vec![svg.view::()]) ``` El parse cuesta — el `view()` no. Si vas a stampear el mismo SVG en muchos nodos (lista de apps con el mismo ícono fallback), parsea una sola vez y clonea el `SvgAsset` (es barato: `Arc` internamente). ## Por qué no parsear en cada paint `vello_svg::render` corre el parser de `usvg` (~ms por SVG no trivial). En una lista con 80 íconos `.desktop`, parsear en cada frame mata el thread de UI. La regla: **el asset se parsea una vez**, la `Scene` resultante se retiene en memoria y se stampea con `scene.append(&inner, Some(xf))` — cuesta lo mismo que dibujar el resto del UI. ## Errores `SvgAsset::from_str` devuelve `Result` — si el XML está corrupto o usa features que `usvg` no soporta. Las apps típicas tratan el error como "fallback a glyph genérico" — no rompen. --- Parte de **llimphi** — ver [llimphi](../LEEME.md).