⎇ bce4abd8cc7cf59daef42c8901d705ed8bb16a92
renaser/kernel/src/texto.rs
Ñawpa willay
Pi imata llamkarqan
ch'uya
feat: integra renaser (kernel SASOS bare-metal) al monorepo
1// =============================================================================
2// renaser :: kernel/src/texto.rs — Fase 3 :: el texto como caso del dibujo
3// -----------------------------------------------------------------------------
4// Con el heap activo, el texto deja de ser un mapa de bits estatico. Una
5// tipografia vectorial se empotra en el binario y se rasteriza glifo a glifo,
6// bajo demanda: el texto se vuelve, literalmente, un caso particular del
7// dibujo — la promesa fundacional de renaser.
8// =============================================================================
9
10use alloc::vec::Vec;
11
12use fontdue::{Font, FontSettings, Metrics};
13use spin::Once;
14
15/// La tipografia vectorial, empotrada en el propio binario del kernel.
16static FUENTE_TTF: &[u8] = include_bytes!("../assets/font.ttf");
17
18/// La fuente ya analizada. Se funde una sola vez, tras activar el heap.
19static FUENTE: Once<Font> = Once::new();
20
21/// Analiza la tipografia empotrada. Requiere el heap ya activo.
22pub fn init() {
23 FUENTE.call_once(|| {
24 Font::from_bytes(FUENTE_TTF, FontSettings::default())
25 .expect("renaser :: la tipografia empotrada es invalida")
26 });
27}
28
29/// Rasteriza un glifo al vuelo: devuelve sus metricas de colocacion y un mapa
30/// de cobertura (un byte de opacidad, 0..=255, por cada pixel del glifo).
31pub fn rasterizar(caracter: char, tam_px: f32) -> (Metrics, Vec<u8>) {
32 FUENTE
33 .get()
34 .expect("renaser :: la tipografia no fue fundida")
35 .rasterize(caracter, tam_px)
36}