[package] name = "llimphi-widget-terminal" version.workspace = true edition.workspace = true license.workspace = true authors.workspace = true publish.workspace = true description = "llimphi-widget-terminal — superficie de terminal infinita y virtualizada (ver 02_ruway/shuma/SDD-TERMINAL.md). Fase 0: store de scrollback append-only (acceso O(1), cap por memoria). Fase 1: virtualización modo línea (sólo se pinta la ventana visible, numeración global + color, scroll propio del widget — costo de render constante a scrollback ilimitado)." repository.workspace = true [dependencies] # El COMPOSITOR y no el shell: este widget compone `View`s, no abre ventanas. # Tomarlo del shell fijaba el backend, y con eso el terminal —y todo lo que lo # monte— quedaba imposible de correr en un proceso aparte. llimphi-compositor = { path = "../../llimphi-compositor", version = "0.1.0", default-features = false } llimphi-theme = { workspace = true } llimphi-widget-scroll = { path = "../scroll", version = "0.1.0", default-features = false } # Acceso a `wgpu` (re-exportado por `llimphi-hal`) para el pipeline GPU # del cell renderer (Fase 4 del SDD-TERMINAL). llimphi-hal = { path = "../../llimphi-hal", version = "0.1.0", optional = true } # Rasterizador de glifos para el atlas GPU del modo grilla (Fase 4 del # El rasterizador de glifos, compartido con el resto de llimphi. Antes acá había # un `fontdue` propio, y eso dejaba DOS rasterizadores en el árbol; ver el # encabezado de `src/glyph_atlas.rs`. Lo que sigue siendo de este widget es la # GRILLA de celdas: es la especialización correcta de un terminal. llimphi-glifos = { path = "../../llimphi-glifos", version = "0.1.0", optional = true } [dev-dependencies] # El shell, SÓLO para los demos, los pantallazos y los tests: abren ventana o # rasterizan de verdad. La lib no lo toma —es lo que deja correr esto en un # proceso aparte—, pero un example que no puede abrir ventana no es un example. llimphi-ui = { workspace = true } # `fontdue` sobrevive como ORÁCULO, no como implementación: `tests/metricas_fontdue.rs` # compara la celda que sale del rasterizador nuevo contra la que salía del viejo. # Sale del binario, no del repo. fontdue = "0.9" png = { workspace = true } pollster = { workspace = true } tempfile = { workspace = true } [[example]] name = "dump_terminal" path = "examples/dump_terminal.rs" [[example]] name = "dump_blocks" path = "examples/dump_blocks.rs" [features] # El backend lo elige quien ensambla. Excluyentes entre sí. default = ["vello", "std", "gpu"] vello = ["llimphi-compositor/vello", "llimphi-widget-scroll/vello"] cpu = ["llimphi-compositor/cpu", "llimphi-widget-scroll/cpu"] wire = ["llimphi-compositor/wire", "llimphi-widget-scroll/wire"] std = ["llimphi-compositor/std", "llimphi-widget-scroll/std"] libm = ["llimphi-compositor/libm", "llimphi-widget-scroll/libm"] # **El camino GPU-directo del modo grilla** (`cell_pipeline` + `glyph_atlas`): # atlas de cobertura y quads instanciados, en vez de mandarle cada glifo al # rasterizador. Trae `llimphi-hal`, o sea wgpu. # # Va detrás de una perilla y no adentro porque **ya estaba apagado**: quien lo # enciende es `SHUMA_GPU_GRID=1`, y sin esa variable el modo grilla pinta por el # camino de siempre. O sea que arrastrar wgpu era el precio de una función que # por defecto no corre — y ese precio lo pagaba también cualquiera que quisiera # sacar el terminal del proceso, porque wgpu FIJA el backend. # # Encendida (el default) no cambia absolutamente nada. Apagada, el modo grilla # sigue andando por vello y `SHUMA_GPU_GRID` no tiene efecto. gpu = ["dep:llimphi-hal", "dep:llimphi-glifos"]