gioser

tawasuyu/brahman

Rust 374TOML 138Markdown 40JSON 175081 Sutichaykuna

⎇ bce4abd8cc7cf59daef42c8901d705ed8bb16a92 renaser/kernel/src/texto.rs Rust · 36 siq'ikuna · 1.5 KB Ñawpa willay Pi imata llamkarqan ch'uya

feat: integra renaser (kernel SASOS bare-metal) al monorepo e2272c0ed · sergio ·

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}